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방법 중 하나를 선택하고 필요한 관련 입력을 입력합니다.
에서 관리형 블록체인 콘솔을 https://console.aws.amazon.com/managedblockchain/
여십시오. RPC에디터를 선택하세요.
요청 섹션에서
다음과 같이 선택합니다.POLYGON_MAINNET
Blockchain Network
.
RPC방법으로 선택합니다.eth_getBlockByNumber
latest
다음과 같이 입력합니다.Block number
전체 거래
플래그로 선택합니다.False
그런 다음 제출RPC을 선택합니다.
응답 섹션에서
latest
차단 결과를 확인할 수 있습니다. 그런 다음 전체 원시 트랜잭션을 복사하여 추가 분석을 위해 또는 애플리케이션의 비즈니스 로직에 사용할 수 있습니다.
자세한 내용은 AMBAccess Polygon에서 RPCs 지원하는 항목을 참조하십시오.
AMB액세스 폴리곤 생성 JSON - 를 사용하여 액세스 폴리곤 RPC 요청 awscurl
생성 AWS CLI
AMB액세스 폴리곤 엔드포인트로 Polygon JSON 요청을 보내려면 서명 버전 4 (SigV4) 를 사용하여 IAM 사용자 자격 증명으로 RPC 요청에 서명하십시오. awscurl
운영 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 모듈을
이 예제 Node.js 스크립트를 실행하려면 다음 사전 요구 사항을 적용하십시오.
시스템에 노드 버전 관리자 (nvm) 와 Node.js 가 설치되어 있어야 합니다. 여기에서
해당 OS의 설치 지침을 찾을 수 있습니다. node --version
명령을 사용하여 Node 버전 18 이상을 사용하고 있는지 확인합니다. 필요한 경우nvm install v18.12.0
명령과 명령을 차례로 사용하여 Node 버전인 버전 18을 LTS설치할 수 있습니다.nvm use v18.12.0
환경 변수에는
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