자습서: OpenZeppelin Defender에서 자동 작업 시작하기
6913 단어 ethereumweb3blockchain
자동 작업이란 무엇입니까?
Autotask는 일정에 따라 또는 일부 조건 집합에 의해 트리거되는 약간의 Javascript 코드를 실행할 수 있는 Defender를 통해 사용할 수 있는 환경입니다. documentation의 첫 번째 섹션에서 자동 작업에 대한 개요와 다른 Defender 구성 요소와의 관계를 확인하세요.
Behind the Scenes of the Autotask environment
자동 작업 예:
Hello World 자동 작업 만들기
이 연습에서는 Defender Autotask 설정과 관련된 움직이는 부분에 대한 실습 소개를 제공합니다.
설정
생성할 Autotask는 Relayer을 사용하여 ethers.js JSON-RPC 호출을 만듭니다.
새 릴레이어 만들기
왼쪽에서 릴레이를 선택한 다음 릴레이 생성을 선택합니다. Relayer에 이름을 지정하고 네트워크에 대해 Goerli를 선택합니다.
Hello World - (웹 인터페이스 사용)
Defender에서 각 주요 구성 요소는 화면 왼쪽에 나열됩니다.
자동 작업 -> 새 자동 작업을 선택합니다.
Autotask에 이름을 지정하고 Autotask의 끝점으로 전송된 요청을 통해 트리거될 수 있도록 Webhook을 선택합니다.
Autotask가 공급자로 연결하고 Ethers.js를 사용하여 네트워크 쿼리를 만들 수 있도록 방금 생성한 Relayer를 선택합니다.
Autotask는
handler
를 내보내야 하는 약간의 서버리스 코드입니다. 핸들러는 Autotask가 트리거될 때마다 호출되는 것입니다.Autotask에 다음 코드를 제공하십시오.
const { KeyValueStoreClient } = require('defender-kvstore-client')
const ethers = require('ethers')
const {
DefenderRelaySigner,
DefenderRelayProvider,
} = require('defender-relay-client/lib/ethers')
async function handler(event) {
const store = new KeyValueStoreClient(event)
const provider = new DefenderRelayProvider(event)
const {userName} = event.request.body;
const block = await provider.getBlockNumber();
const lastRunBlockNumber = await store.get('lastRunBlockNumber')
let msg = (lastRunBlockNumber) ? `This Autotask was last triggered on block ${lastRunBlockNumber}` : 'This is the first time this Autotask has been triggered'
await store.put('lastRunBlockNumber', block.toString())
return `Hello ${userName}! Current block: ${block}. ${msg}`;
}
module.exports = {
handler,
}
Key-value data store package을 사용하면 서로 다른 Autotask 실행 간에 데이터 저장소를 유지할 수 있습니다.
다음 화면에서 Webhook URI를 복사합니다.
Postman(또는 유사)을 열고 새 POST 요청을 생성합니다. Autotask의 끝점을 붙여넣습니다. 본문 탭에서 다음을 raw/JSON으로 보냅니다.
{
"name": "Satoshi"
}
요청을 실행하십시오! 본문 결과에 인사말이 표시됩니다.
Autotask를 성공적으로 만들고 트리거한 것을 축하합니다! 다음으로 웹 인터페이스가 아닌 클라이언트 패키지를 사용하여 Autotask를 만듭니다.
Hello World - (defender-autotask-client 사용)
Defender 클라이언트 패키지를 사용하면 선호하는 코드 편집기를 사용하여 API를 통해 다양한 Defender 구성 요소를 만들고 관리할 수 있습니다.
새 폴더를 만들고 초기화합니다
package.json
.$ mkdir autotasks && cd autotasks && yarn init -y
Defender Autotask Client 및 필요한 npm 패키지를 설치합니다.
$ yarn add defender-autotask-client defender-relay-client defender-kvstore-client dotenv
defender-client
패키지를 사용하면 자동 작업과 함께 전체 CRUD 기능을 사용할 수 있습니다.환경 변수를 저장할 gitignored 파일을 만듭니다.
$ touch .env
이 파일에서 Defender Team API 키와 암호를 제공합니다.
API_KEY=
API_SECRET=
Autotask 코드용 새 파일
index.js
을 만듭니다.$ mkdir autotasks && touch autotasks/index.js
클라이언트 패키지를 사용할 때 Defender는 Autotask 코드가
index.js
파일에 있을 것으로 예상합니다.index.js
에서 이전과 동일한 Autotask 코드를 제공합니다.릴레이어의 ID를 가져옵니다.
Autotask는 Relayer ID를 지정하여 연결된 Relayer를 알고 있습니다.
웹 UI를 사용하면 Relayer를 선택하기만 하면 됩니다. defender-client 패키지를 사용하면 해당 ID를 사용하여 Relayer를 지정해야 합니다.
defender-relay-client
패키지를 사용하면 간단한 쿼리를 실행하여 Defender 계정과 연결된 모든 릴레이어를 나열할 수 있습니다.$ mkdir scripts && touch scripts/getRelayerId.js
다음 코드를 추가하고 스크립트를 실행합니다.
const { RelayClient } = require('defender-relay-client');
async function run() {
const { API_KEY: apiKey, API_SECRET: apiSecret } = process.env;
const relayClient = new RelayClient({ apiKey, apiSecret });
console.log(await relayClient.list());
}
run().catch((error) => {
console.error(error);
process.exitCode = 1;
});
Autotask를 연결하려는 Relayer의 값
relayerId
을 복사합니다. Autotask 생성 스크립트에서 이 값을 제공합니다.다음으로 코드를 배포할 스크립트를 만듭니다.
$ mkdir scripts && touch scripts/createAutotask.js
다음 코드를 추가합니다.
const { AutotaskClient } = require('defender-autotask-client')
async function main() {
require('dotenv').config()
const credentials = {
apiKey: process.env.API_KEY,
apiSecret: process.env.API_SECRET,
}
const autotaskClient = new AutotaskClient(credentials)
const params = {
name: 'Hello World 2',
encodedZippedCode: await autotaskClient.getEncodedZippedCodeFromFolder(
'./autotasks'
),
trigger: {
type: 'webhook',
},
paused: false,
relayerId: '3f12191a-26a3-44ca-a3c9-ab7b57a97b8e',
}
const createdAutotask = await autotaskClient.create(params)
console.log('Created Autotask with ID: ', createdAutotask.autotaskId)
}
if (require.main === module) {
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})
}
node scripts/createAutotask.js
로 실행Defender를 열고 Autotasks 대시보드를 새로 고칩니다. 이 Autotask의 webhook을 복사하여 Postman에 제공하고 이전과 같이 Autotask를 트리거합니다.
Autotask는 동일한 키-값 저장소를 사용하기 때문에 이전에 UI를 통해 생성된 Autotask에서 저장된 값을 볼 수 있습니다.
Defender Autotasks의 세계로 첫 발을 내딛은 것을 축하합니다!
Reference
이 문제에 관하여(자습서: OpenZeppelin Defender에서 자동 작업 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/slw/tutorial-get-started-with-autotasks-in-openzeppelin-defender-8l6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)