명령행을 사용하여 계약 배치

스마트 계약을 컴파일한 후 Oracle Blockchain Platform Besu 환경에 배포할 수 있습니다.

다음 단계는 패키지화된 토큰화된 예금 계약 프로젝트를 배포하는 방법을 안내합니다. 기타 패키지 계약의 경우 계약 패키지와 함께 번들로 제공되는 README 파일을 참조하십시오.

Oracle Blockchain Platform Besu 네트워크 구성

다음 명령을 실행하여 프로젝트의 hardhat.config.ts 파일에 사용되는 값을 설정합니다.

npx hardhat vars set BESU_CHAIN_ID <chain-id>
npx hardhat vars set BESU_RPC_URL <rpc-proxy-url>
npx hardhat vars set BESU_RPX_PROXY_AUTH_TOKEN "Bearer <rpc-auth-token>"
npx hardhat vars set WALLET_SERVICE_BASE_URL <wallet-service-sign-url>
npx hardhat vars set WALLET_SERVICE_ENABLED true
npx hardhat vars set WALLET_SERVICE_ACCOUNTS '[{"address":"0x<address>","walletId":"0x<address>"}]'
npx hardhat vars set WALLET_SERVICE_AUTH_TOKEN "Bearer <wallet-service-auth-token>"

Tokenized Deposit 프로젝트의 경우 다음 예와 같이 BESU_RPC_URL 값은 구성된 전체 JSON-RPC 프록시 끝점입니다.

https://rpcproxy.example.oracle.com/v1/besu/proxy

다음 예와 같이 WALLET_SERVICE_BASE_URL 값은 전체 /트랜잭션 끝점입니다.

https://rpcproxy.example.oracle.com/v1/besu/transaction

비활성 프록시 쌍 배치

다음 예제와 같이 안정적인 배치 ID로 ERC-5982 배치 스크립트를 실행합니다. 이 스크립트는 ERC-20 도우미 라이브러리, 계정 프록시 및 토큰화된 보증금 프록시를 배포하거나 재개합니다. 또한 계정/토큰 컨텍스트를 연결하고 두 프록시에서 거버넌스 컨텍스트를 설정합니다.

DEPLOYMENT_ID=<deployment-id> \
GOVERNANCE_ADDRESS=<governance-contract-address> \
GOVERNANCE_UUID=<governance-uuid> \
TOKEN_NAME="DepositToken" \
TOKEN_SYMBOL="DP" \
TOKEN_DESCRIPTION="DepositToken proxy contract" \
ADMIN_USER_ID="platformadmin1" \
ADMIN_ORG_ID="org1" \
CONTRACT_METADATA_SMART_CONTRACT_ID="DP123" \
CONTRACT_METADATA_VERSION="1.0.0" \
CONTRACT_METADATA_DESCRIPTION="DepositToken proxy contract" \
CONTRACT_METADATA_AUTHOR="Oracle" \
CONTRACT_METADATA_TAGS='{"assetType":"tokenized deposit","role":"proxy"}' \
npx hardhat run scripts/deploy/deposittoken/deploy-deposittoken-erc-5982.ts --network obp-besu

DEPLOYMENT_ID, GOVERNANCE_ADDRESS 및 GOVERNANCE_UUID 값이 필요합니다. 중단된 배포를 재개하려면 동일한 배포 ID만 재사용하십시오. 배치가 성공적으로 완료되면 해당 재개 캐시가 삭제됩니다. 해당 ID로 재실행하면 새로 배치가 시작됩니다.

CONTRACT_METADATA_* 값은 ERC-7201 배치 레지스트리의 토큰화된 예금 프록시를 설명합니다. CONTRACT_METADATA_TAGS은 값이 문자열인 JSON 객체여야 합니다.

명령이 완료되고 토큰 및 계정 프록시가 비활성 상태입니다. 인쇄된 DEPLOYMENT_SUMMARY_JSON를 보존하고 두 프록시 주소를 모두 기록합니다. 거버넌스 의도에 필요합니다.

배포 의향서 제출

다음 스크립트에서 기본 1시간 제안 창이 환경에 적합하지 않은 경우 DEADLINE_SECONDS 값을 편집하여 미래 기한을 설정합니다. 배포에 의해 거버넌스 컨텍스트가 설정된 모든 프록시를 포함합니다. 토큰화된 보증금 패키지의 경우 일반적으로 토큰 프록시와 해당 계정 프록시를 모두 의미합니다. RPC 프록시 및 전자 지갑 서비스 경로를 통해 제출된 Oracle Blockchain Platform Besu 제안의 경우 다음 스크립트를 실행하십시오.

GOVERNANCE_INTENT_MODE=obp-besu \
GOVERNANCE_ADDRESS=<governance-contract-address> \
GOVERNANCE_UUID=<governance-uuid> \
DEPLOY_TARGETS_JSON='["<token-proxy>","<account-proxy>"]' \
DEADLINE_SECONDS=3600 \
DEPLOY_INTENT_MANIFEST=.obp-da/governance/deploy-intent.json \
npx hardhat run scripts/deploy/deposittoken/governance/propose-deploy-intent.ts --network obp-besu

스크립트는 각 대상을 검증하고, EIP-1967 구현 및 런타임 코드 해시를 해결하고, 제안을 제출하고, 검토된 구성요소 및 제안 결과를 DEPLOY_INTENT_MANIFEST 변수로 지정된 파일에 씁니다.

직접 JSON-RPC 거버넌스 제출의 경우 다음 예와 같이 로컬 서명자가 있는 Hardhat 네트워크를 사용하고 제안 전송 및 네트워크만 변경합니다.

GOVERNANCE_INTENT_MODE=json-rpc \
GOVERNANCE_ADDRESS=<governance-contract-address> \
GOVERNANCE_UUID=<governance-uuid> \
DEPLOY_TARGETS_JSON='["<token-proxy>","<account-proxy>"]' \
DEADLINE_SECONDS=3600 \
DEPLOY_INTENT_MANIFEST=.obp-da/governance/deploy-intent.json \
npx hardhat run scripts/deploy/deposittoken/governance/propose-deploy-intent.ts --network <direct-json-rpc-network>

직접 네트워크는 권한이 부여된 비보안 서명자로 구성되어야 합니다. 전자 지갑 서비스 전용 구성에서는 JSON-RPC를 사용하지 마십시오.

거버넌스 활성화

배포 의도를 제출하는 것은 프록시 배포와는 다른 프로세스입니다.

  • No-Op: 포함된 구성 요소가 성공적인 proposeDeployIntent 처리 중에 활성화됩니다. 트랜잭션 또는 Oracle Blockchain Platform 응답을 확인한 다음 활성 상태를 질의하십시오.
  • Governed: 구성된 정책이 마감일 전에 필요한 승인을 받을 때까지 의도는 보류 중인 상태로 유지됩니다. 토큰 및 계정은 해당 정책이 완료된 후에만 자동으로 활성화됩니다.

CLI는 거버넌스 승인자를 우회하지 않습니다. 제안이 만료되거나 거부되거나 잘못된 프록시/코드 해시를 사용하는 경우 초기 배포를 활성으로 처리하는 대신 원인을 해결하고 새 의도를 제출하십시오.

거버넌스가 활성화된 후 배치를 확인합니다. 생성된 Postman 또는 래퍼 API 자산을 사용하거나 프로젝트를 Besu용 Blockchain App Builder로 임포트하고 실행 패널을 사용합니다. 배치 요약의 프록시 주소를 호출 대상으로 사용합니다. helper 라이브러리 또는 구현 주소를 사용하지 마십시오.

참고:

계약을 배포하면 프로젝트 루트 아래의 .openzeppelin 폴더에 매니페스트 파일이 생성됩니다. 운용 네트워크(개발 네트워크 아님)의 경우 이러한 파일을 소스 제어에 커밋합니다. 자세한 내용은 OpenZeppelin 설명서의 Network Files을 참조하십시오.

문제 해결

메시지 또는 조건 해결
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required Deploy 명령에 두 값을 제공하고 선택한 네트워크의 Governance 주소에 바이트 코드가 있는지 확인합니다.
배포가 완료되지 않았습니다. 배포가 완료되기 전에 동일한 DEPLOYMENT_ID 값을 사용하여 동일한 명령을 다시 실행합니다.
DEPLOY_TARGETS_JSON가 부적합합니다. 고유한 프록시 주소의 비어 있지 않은 JSON 배열을 전달합니다(예: ["0x...token", "0x...account"]).
대상이 EIP-1967 프록시가 아닙니다. 구현 또는 라이브러리 주소가 아닌 DEPLOYMENT_SUMMARY_JSON 파일에서 배포된 토큰 및 계정 프록시 주소를 사용합니다.
권한 부여가 없으므로 Oracle Blockchain Platform 의도 제출을 실패했습니다. BESU_RPX_PROXY_AUTH_TOKEN 값이 설정되었고 구성된 Oracle Blockchain Platform 네트워크에서 권한 부여 헤더로 전달되는지 확인합니다.
배치를 성공했지만 토큰이 비활성 상태로 유지됩니다. 배포 의도를 제출합니다. 거버넌스의 경우 정책 승인을 기다립니다. No-Op 거버넌스의 경우 제안 처리가 성공했는지 확인하십시오.