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

아마존 관리형 블록체인 (AMB) 액세스 폴리곤은 프리뷰 릴리즈 중이며 변경될 수 있습니다.

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

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

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

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

Polygon 메인넷의 퍼블릭 엔드포인트에 액세스하여 JSON-RPC 호출을 수행하려면 Amazon Managed Blockchain (AMBAWS_SECRET_ACCESS_KEY) 액세스 폴리곤에 대한 적절한 IAM 권한이 있는 사용자 자격 증명 (AWS_ACCESS_KEY_ID및) 이 있어야 합니다. 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 서비스로 AmazonManagedBlockchainPolygonAccess 이동하여 정책을 IAM 사용자에게 할당된 역할에 연결합니다.

다음을 사용하여 AMB Access RPC 편집기에서 Polygon 원격 프로시저 호출 (RPC) 요청을 생성합니다. AWS Management Console

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

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

  1. https://console.aws.amazon.com/managedblockchain/ 에서 관리형 블록체인 콘솔을 엽니다.

  2. RPC 에디터를 선택합니다.

  3. 요청 섹션에서 블록체인 POLYGON_MAINNET 네트워크로 선택합니다.

  4. RPC eth_getBlockByNumber 방법으로 선택하세요.

  5. 블록 번호로 입력하고 latest 전체 트랜잭션 False 플래그로 선택합니다.

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

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

자세한 내용은 AMB 액세스 폴리곤에서 지원하는 RPC를 참조하십시오.

다음을 사용하여 AMB 액세스 폴리곤 JSON-RPC 요청을 전송하십시오. awscurlAWS CLI

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

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

brew install awscurl

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

다음 명령은 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 Access 토큰 기반 액세스 기능을 사용하여 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 메인넷 네트워크에 액세스하기 위해 HTTPS를 사용하여 서명된 요청을 제출하거나 AXIOS와 같은 타사 라이브러리를 사용하여 Polygon JSON-RPC를 호출할 수 있습니다. 다음 Node.js 예제는 서명 버전 4 (SigV4) 와 토큰 기반 액세스를 모두 사용하여 AMB 액세스 폴리곤 엔드포인트에 Polygon JSON-RPC 요청을 보내는 방법을 보여줍니다. 첫 번째 예시는 한 주소에서 다른 주소로 거래를 보내고 다음 예시는 블록체인에서 거래 세부 정보와 잔액 정보를 요청합니다.

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

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

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

  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 파일 내 트랜잭션 전송

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

작은 정보

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

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

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 내 트랜잭션 읽기

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

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

다시 수신된 응답은 다음과 유사합니다.

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