아마존 관리형 블록체인 (AMB) 액세스 폴리곤 시작하기 - AMB액세스 폴리곤

Amazon Managed Blockchain (AMB) 액세스 폴리곤은 프리뷰 릴리즈 중이며 변경될 수 있습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

아마존 관리형 블록체인 (AMB) 액세스 폴리곤 시작하기

이 섹션의 정보와 절차를 사용하여 Amazon Managed Blockchain (AMB) 액세스 폴리곤을 시작하십시오.

Polygon 블록체인 네트워크에 액세스하기 위한 IAM 정책을 생성하십시오.

폴리곤 메인넷에서 JSON - RPC 호출을 위한 퍼블릭 엔드포인트에 액세스하려면 Amazon Managed Blockchain (AWS_SECRET_ACCESS_KEY) Access Polygon에 대한 적절한 IAM 권한이 있는 사용자 자격 증명 (AWS_ACCESS_KEY_ID및AMB) 이 있어야 합니다. 다음과 같은 기능을 갖춘 터미널에서 AWS CLI 설치된 후 다음 명령을 실행하여 두 Polygon 엔드포인트에 모두 액세스하는 IAM 정책을 생성합니다.

cat <<EOT > ~/amb-polygon-access-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid" : "AMBPolygonAccessPolicy", "Effect": "Allow", "Action": [ "managedblockchain:InvokeRpcPolygon*" ], "Resource": "*" } ] } EOT aws iam create-policy --policy-name AmazonManagedBlockchainPolygonAccess --policy-document file://$HOME/amb-polygon-access-policy.json
참고

이전 예제에서는 사용 가능한 모든 Polygon 네트워크에 액세스할 수 있습니다. 특정 엔드포인트에 액세스하려면 다음 Action 명령을 사용하십시오.

  • "managedblockchain:InvokeRpcPolygonMainnet"

정책을 생성한 후 해당 정책을 IAM 사용자 역할에 연결하여 적용하십시오. 에서 AWS Management Console IAM서비스로 이동하여 IAM 사용자에게 할당된 역할에 정책을 AmazonManagedBlockchainPolygonAccess 연결합니다.

를 사용하여 AMB 액세스 RPC 편집기에서 Polygon 원격 프로시저 call (RPC) 요청을 생성합니다. AWS Management Console

에서 원격 프로시저 호출 (RPCs) 을 편집, 구성 및 제출할 수 있습니다. AWS Management Console AMB액세스 폴리곤 사용. 이를 통해 Polygon 네트워크에서 데이터를 읽고 트랜잭션을 작성할 수 있습니다. 여기에는 데이터 검색 및 Polygon 네트워크에 트랜잭션 제출이 포함됩니다. RPCs

다음 예제는 를 사용하여 최신 블록에 대한 정보를 가져오는 방법을 보여줍니다. eth_getBlockByNumber RPC 강조 표시된 변수를 직접 입력으로 변경하거나 나열된 RPC방법 중 하나를 선택하고 필요한 관련 입력을 입력합니다.

  1. 에서 관리형 블록체인 콘솔을 https://console.aws.amazon.com/managedblockchain/여십시오.

  2. RPC에디터를 선택하세요.

  3. 요청 섹션에서 POLYGON_MAINNET 다음과 같이 선택합니다. Blockchain Network.

  4. eth_getBlockByNumberRPC방법으로 선택합니다.

  5. latest다음과 같이 입력합니다. Block number전체 거래 False 플래그로 선택합니다.

  6. 그런 다음 제출RPC을 선택합니다.

  7. 응답 섹션에서 latest 차단 결과를 확인할 수 있습니다. 그런 다음 전체 원시 트랜잭션을 복사하여 추가 분석을 위해 또는 애플리케이션의 비즈니스 로직에 사용할 수 있습니다.

자세한 내용은 AMBAccess Polygon에서 RPCs 지원하는 항목을 참조하십시오.

AMB액세스 폴리곤 생성 JSON - 를 사용하여 액세스 폴리곤 RPC 요청 awscurl 생성 AWS CLI

AMB액세스 폴리곤 엔드포인트로 Polygon JSON 요청을 보내려면 서명 버전 4 (SigV4) 를 사용하여 IAM 사용자 자격 증명으로 RPC 요청에 서명하십시오. awscurl명령줄 도구를 사용하면 다음과 같은 요청에 서명할 수 있습니다. AWS SigV4를 사용하는 서비스. 자세한 내용은 READMEawscurl .md를 참조하십시오.

운영 awscurl 체제에 적합한 방법을 사용하여 설치합니다. macOS에서는 HomeBrew 다음과 같은 응용 프로그램을 사용하는 것이 좋습니다.

brew install awscurl

이미 설치 및 구성한 경우 AWS CLI, IAM 사용자 자격 증명 및 기본값 AWS 리전 사용자 환경에서 설정되고 액세스할 수 awscurl 있습니다. 를 사용하여 를 awscurl 호출하여 Polygon 메인넷에 요청을 제출하십시오. eth_getBlockByNumber RPC 이 호출은 정보를 검색하려는 블록 번호에 해당하는 문자열 파라미터를 수락합니다.

다음 명령은 params 배열의 블록 번호를 사용하여 헤더를 검색할 특정 블록을 선택하여 Polygon 메인넷에서 블록 데이터를 검색합니다.

awscurl -X POST -d '{ "jsonrpc": "2.0", "id": "eth_getBlockByNumber-curltest", "method":"eth_getBlockByNumber", "params":["latest", false] }' --service managedblockchain https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com -k
작은 정보

토큰을 사용하는 AMB 액세스 토큰 기반 액세스 기능을 사용하여 curl 이와 동일한 요청을 할 수도 있습니다. Accessor 자세한 내용은 AMB Access Polygon 요청을 위한 토큰 기반 액세스를 위한 액세스 토큰 생성 및 관리 단원을 참조하십시오.

curl -X POST -d '{"jsonrpc":"2.0", "id": "eth_getBlockByNumber-curltest", "method":"eth_getBlockByNumber", "params":["latest", false] }' 'https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com?billingtoken=your-billing-token'

두 명령 중 하나의 응답은 최신 블록에 대한 정보를 반환합니다. 설명을 위해 다음 예를 참조하십시오.

{"error":null,"id":"eth_getBlockByNumber-curltest","jsonrpc":"1.0", "result":{"baseFeePerGas":"0x873bf591e","difficulty":"0x18", "extraData":"0xd78301000683626f7288676f312e32312e32856c696e757800000000000000009a\ 423a58511085d90eaf15201a612af21ccbf1e9f8350455adaba0d27eff0ecc4133e8cd255888304cc\ 67176a33b451277c2c3c1a6a6482d2ec25ee1573e8ba000", "gasLimit":"0x1c9c380","gasUsed":"0x14ca04d", "hash":"0x1ee390533a3abc3c8e1306cc1690a1d28d913d27b437c74c761e1a49********;", "nonce":"0x0000000000000000","number":"0x2f0ec4d", "parentHash":"0x27d47bc2c47a6d329eb8aa62c1353f60e138fb0c596e3e8e9425de163afd6dec", "receiptsRoot":"0x394da96025e51cc69bbe3644bc4e1302942c2a6ca6bf0cf241a5724c74c063fd", "sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "size":"0xbd6b", "stateRoot":"0x7ca9363cfe9baf4d1c0dca3159461b2cca8604394e69b30af05d7d5c1beea6c3", "timestamp":"0x653ff542", "totalDifficulty":"0x33eb01dd","transactions":[...], "transactionsRoot":"0xda1602c66ffd746dd470e90a47488114a9d00f600ab598466ecc0f3340b24e0c", "uncles":[]}}

Node.js 내 폴리곤 JSON 생성 - RPC 요청

Node.js 네이티브 https 모듈을 사용하여 Polygon JSON 메인넷 네트워크에 액세스하는 HTTPS 데 사용하는 서명된 요청을 RPCs 제출하여 Polygon을 호출하거나, 다음과 같은 타사 라이브러리를 사용할 수 있습니다. AXIOS 다음 Node.js 예제는 서명 버전 4 (SigV4) 와 토큰 기반 JSON AMB 액세스를 모두 사용하여 Access Polygon 엔드포인트에 Polygon RPC 요청을 보내는 방법을 보여줍니다. 첫 번째 예시에서는 한 주소에서 다른 주소로 트랜잭션을 전송하고, 다음 예시는 블록체인으로부터 트랜잭션 세부 정보와 잔액 정보를 요청합니다.

이 예제 Node.js 스크립트를 실행하려면 다음 사전 요구 사항을 적용하십시오.

  1. 시스템에 노드 버전 관리자 (nvm) 와 Node.js 가 설치되어 있어야 합니다. 여기에서 해당 OS의 설치 지침을 찾을 수 있습니다.

  2. node --version명령을 사용하여 Node 버전 18 이상을 사용하고 있는지 확인합니다. 필요한 경우 nvm install v18.12.0 명령과 명령을 차례로 사용하여 Node 버전인 버전 18을 LTS설치할 수 있습니다. nvm use v18.12.0

  3. 환경 변수에는 AWS_ACCESS_KEY_ID 계정과 관련된 자격 증명이 AWS_SECRET_ACCESS_KEY 포함되어야 합니다.

    다음 명령을 사용하여 클라이언트에서 이러한 변수를 문자열로 내보냅니다. 다음 문자열에서 빨간색으로 표시된 값을 IAM 사용자 계정의 적절한 값으로 바꾸십시오.

    export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"

모든 사전 요구 사항을 완료한 후 선호하는 코드 편집기를 사용하여 다음 파일을 로컬 환경의 디렉터리에 복사하십시오.

package.json

{ "name": "polygon-rpc", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "ethers": "^6.8.1", "@aws-crypto/sha256-js": "^5.2.0", "@aws-sdk/credential-provider-node": "^3.360.0", "@aws-sdk/protocol-http": "^3.357.0", "@aws-sdk/signature-v4": "^3.357.0", "axios": "^1.6.2" } }

dispatch-evm-rpc.js

const axios = require("axios"); const SHA256 = require("@aws-crypto/sha256-js").Sha256; const defaultProvider = require("@aws-sdk/credential-provider-node").defaultProvider; const HttpRequest = require("@aws-sdk/protocol-http").HttpRequest; const SignatureV4 = require("@aws-sdk/signature-v4").SignatureV4; // define a signer object with AWS service name, credentials, and region const signer = new SignatureV4({ credentials: defaultProvider(), service: "managedblockchain", region: "us-east-1", sha256: SHA256, }); const rpcRequest = async (rpcEndpoint, rpc) => { // parse the URL into its component parts (e.g. host, path) let url = new URL(rpcEndpoint); // create an HTTP Request object const req = new HttpRequest({ hostname: url.hostname.toString(), path: url.pathname.toString(), body: JSON.stringify(rpc), method: "POST", headers: { "Content-Type": "application/json", "Accept-Encoding": "gzip", host: url.hostname, }, }); // use AWS SignatureV4 utility to sign the request, extract headers and body const signedRequest = await signer.sign(req, { signingDate: new Date() }); try { //make the request using axios const response = await axios({ ...signedRequest, url: url, data: req.body, }); return response.data; } catch (error) { console.error("Something went wrong: ", error); } }; module.exports = { rpcRequest: rpcRequest };

sendTx.js

주의

다음 코드는 하드코딩된 개인 키를 사용하여 지갑 서명자를 생성하여 Ethers.js 데모용으로만 사용합니다. 실제 자금이 있고 보안상의 위험이 있으므로 프로덕션 환경에서는 이 코드를 사용하지 마십시오.

필요한 경우 계정 팀에 문의하여 지갑 및 서명자 모범 사례에 대해 조언하세요.

const ethers = require("ethers"); //set AMB Access Polygon endpoint using token based access (TBA) let token = "your-billing-token" let url = `https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com?billingtoken=${token}`; //prevent batch RPCs let options = { batchMaxCount: 1, }; //create JSON RPC provider with AMB Access endpoint and options let provider = new ethers.JsonRpcProvider(url, null, options); let sendTx = async (to) => { //create an instance of the Wallet class with a private key //DO NOT USE A WALLET YOU USE ON MAINNET, NEVER USE A RAW PRIVATE KEY IN PROD let pk = "wallet-private-key"; let signer = new ethers.Wallet(pk, provider); //use this wallet to send a transaction of POL from one address to another const tx = await signer.sendTransaction({ to: to, value: ethers.parseUnits("0.0001", "ether"), }); console.log(tx); }; sendTx("recipent-address");

readTx.js

let rpcRequest = require("./dispatch-evm-rpc").rpcRequest; let ethers = require("ethers"); let getTxDetails = async (txHash) => { //set url to a Signature Version 4 endpoint for AMB Access let url = "https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com"; //set RPC request body to get transaction details let getTransactionByHash = { id: "1", jsonrpc: "2.0", method: "eth_getTransactionByHash", params: [txHash], }; //make RPC request for transaction details let txDetails = await rpcRequest(url, getTransactionByHash); //set RPC request body to get recipient user balance let getBalance = { id: "2", jsonrpc: "2.0", method: "eth_getBalance", params: [txDetails.result.to, "latest"], }; //make RPC request for recipient user balance let recipientBalance = await rpcRequest(url, getBalance); console.log("TX DETAILS: ", txDetails.result, "BALANCE: ", ethers.formatEther(recipientBalance.result)); }; getTxDetails("your-transaction-id");

이러한 파일이 디렉터리에 저장되면 다음 명령을 사용하여 코드를 실행하는 데 필요한 종속 항목을 설치합니다.

npm install

Node.js 파일로 트랜잭션 전송

위 예제에서는 트랜잭션에 서명하고 Access Polygon을 사용하여 Polygon 메인넷으로 브로드캐스트함으로써 한 주소에서 다른 주소로 네이티브 Polygon 메인넷 토큰 (POL) 을 보냅니다. AMB 이를 위해서는 이더리움 및 Polygon과 같은 이더리움 호환 블록체인과 상호 작용하는 데 널리 사용되는 라이브러리를 사용하는 sendTx.js Ethers.js 스크립트를 사용하세요. 빨간색으로 강조 표시된 코드에서 토큰 기반 액세스를 billingToken 위한 Accessor 토큰, 트랜잭션에 서명하는 데 사용한 프라이빗 키, 트랜잭션을 수신하는 수신자 주소 등 세 가지 변수를 바꿔야 합니다. POL

작은 정보

자금 손실 위험을 없애려면 기존 지갑을 다시 사용하는 대신 이를 위해 새 개인 키 (지갑) 를 만드는 것이 좋습니다. Ethers 라이브러리의 Wallet class 메서드 createRandom () 를 사용하여 테스트할 지갑을 생성할 수 있습니다. 또한 Polygon POL Mainnet에서 요청해야 하는 경우 공용 POL 파우셋을 사용하여 테스트에 사용할 소량을 요청할 수 있습니다.

자금이 입금된 지갑의 개인 키와 수신자 주소를 코드에 추가했으면 다음 코드를 실행하여 사용자 billingToken 주소에서 다른 주소로 전송되는.0001 트랜잭션에 서명하고 액세스 폴리곤을 POL 사용하여 Polygon Mainnet에 브로드캐스트하여 -를 호출합니다. eth_sendRawTransaction JSON RPC AMB

node sendTx.js

다시 수신된 응답은 다음과 같습니다.

TransactionResponse { provider: JsonRpcProvider {}, blockNumber: null, blockHash: null, index: undefined, hash: '0x8d7538b4841261c5120c0a4dd66359e8ee189e7d1d34ac646a1d9923********', type: 2, to: '0xd2bb4f4f1BdC4CB54f715C249Fc5a991********', from: '0xcf2C679AC6cb7de09Bf6BB6042ecCF05********', nonce: 2, gasLimit: 21000n, gasPrice: undefined, maxPriorityFeePerGas: 16569518669n, maxFeePerGas: 16569518685n, data: '0x', value: 100000000000000n, chainId: 80001n, signature: Signature { r: "0x1b90ad9e9e4e005904562d50e904f9db10430a18b45931c059960ede337238ee", s: "0x7df3c930a964fd07fed4a59f60b4ee896ffc7df4ea41b0facfe82b470db448b7", yParity: 0, networkV: null }, accessList: [] }

응답은 거래 영수증을 구성합니다. 속성 hash 값을 저장합니다. 이것은 방금 블록체인에 제출한 거래의 식별자입니다. 읽기 트랜잭션 예제에서 이 프로퍼티를 사용하여 Polygon 메인넷에서 이 트랜잭션에 대한 추가 세부 정보를 얻을 수 있습니다.

참고로 blockHash null 응답에는 blockNumber 및 가 있습니다. 이는 거래가 아직 Polygon 네트워크의 블록에 기록되지 않았기 때문입니다. 이러한 값은 나중에 정의되며 다음 섹션에서 트랜잭션 세부 정보를 요청할 때 해당 값이 표시될 수 있습니다.

Node.js 내 트랜잭션 읽기

이 섹션에서는 이전에 제출한 거래에 대한 거래 세부 정보를 요청하고 Access Polygon을 사용하여 Polygon 메인넷에 대한 읽기 요청을 사용하여 수신자 주소의 POL 잔액을 검색합니다. AMB readTx.js파일에서 레이블이 지정된 변수를 교체합니다.your-transaction-id 이전 섹션의 코드 실행 응답에서 hash 저장한 것으로 저장합니다.

이 코드는 유틸리티를 사용하여 AMB Access Polygon에 대한 HTTPS 요청에 서명하는 유틸리티를 사용합니다. 이 유틸리티는 필수 서명 버전 4 (SigV4) 모듈을 사용하여 Access Polygon에 대한 요청에 서명합니다. dispatch-evm-rpc.js AWS SDK널리 사용되는 클라이언트를 사용하여 요청을 전송합니다. HTTP AXIOS

받은 응답은 다음과 비슷합니다.

TX DETAILS: { blockHash: '0x59433e0096c783acab0659175460bb3c919545ac14e737d7465b3ddc********', blockNumber: '0x28b4059', from: '0xcf2c679ac6cb7de09bf6bb6042eccf05b7fa1394', gas: '0x5208', gasPrice: '0x3db9eca5d', maxPriorityFeePerGas: '0x3db9eca4d', maxFeePerGas: '0x3db9eca5d', hash: '0x8d7538b4841261c5120c0a4dd66359e8ee189e7d1d34ac646a1d9923********', input: '0x', nonce: '0x2', to: '0xd2bb4f4f1bdc4cb54f715c249fc5a991********', transactionIndex: '0x0', value: '0x5af3107a4000', type: '0x2', accessList: [], chainId: '0x13881', v: '0x0', r: '0x1b90ad9e9e4e005904562d50e904f9db10430a18b45931c059960ede337238ee', s: '0x7df3c930a964fd07fed4a59f60b4ee896ffc7df4ea41b0facfe82b470db448b7' } BALANCE: 0.0003

응답은 거래 세부 정보를 나타냅니다. 참고로blockHash, 이제 blockNumber AN이 정의되었을 가능성이 높습니다. 이는 거래가 블록에 기록되었음을 나타냅니다. 이 값이 여전히 null 유효하다면 몇 분 정도 기다린 다음 코드를 다시 실행하여 거래가 블록에 포함되었는지 확인하세요. 마지막으로, 수신자 주소 잔액의 16진수 표현 (0x110d9316ec000) 은 Ethers의 formatEther() 방법을 사용하여 십진수로 변환됩니다. 이 방법은 16진수를 십진수로 변환하고 소수점 자리를 18 (10^18) 씩 이동하여 실제 잔액을 POL 산출합니다.

작은 정보

위의 코드 예제는 Node.js, Ethers 및 Axios를 사용하여 지원되는 JSON 몇 가지 기능을 활용하는 방법을 보여 주지만 AMB Access Polygon에서는 이 서비스를 사용하여 예제를 수정하고 Polygon에서 애플리케이션을 빌드하는 다른 코드를 작성할 수 있습니다. RPCs Access Polygon에서 지원되는 전체 목록은 을 참조하십시오JSON. RPCs AMB AMB 액세스 폴리곤을 지원하는 관리형 블록체인 API 및 JSON-RPC