Memulai dengan Amazon Managed Blockchain (AMB) Access Polygon - Poligon Akses AMB

Amazon Managed Blockchain (AMB) Access Polygon sedang dalam rilis pratinjau dan dapat berubah sewaktu-waktu.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memulai dengan Amazon Managed Blockchain (AMB) Access Polygon

Mulailah dengan Amazon Managed Blockchain (AMB) Access Polygon dengan menggunakan informasi dan prosedur di bagian ini.

Buat kebijakan IAM untuk mengakses jaringan blockchain Polygon

Untuk mengakses titik akhir publik untuk Polygon Mainnet untuk melakukan panggilan JSON-RPC, Anda harus memiliki kredensi pengguna (AWS_ACCESS_KEY_IDdanAWS_SECRET_ACCESS_KEY) yang memiliki izin IAM yang sesuai untuk Amazon Managed Blockchain (AMB) Access Polygon. Di terminal dengan AWS CLI instalasi, jalankan perintah berikut untuk membuat kebijakan IAM untuk mengakses kedua titik akhir Polygon:

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
catatan

Contoh sebelumnya memberi Anda akses ke semua jaringan Polygon yang tersedia. Untuk mendapatkan akses ke titik akhir tertentu, gunakan Action perintah berikut:

  • "managedblockchain:InvokeRpcPolygonMainnet"

Setelah membuat kebijakan, lampirkan kebijakan tersebut ke peran pengguna IAM agar kebijakan tersebut diterapkan. Di bagian AWS Management Console, navigasikan ke layanan IAM, dan lampirkan kebijakan AmazonManagedBlockchainPolygonAccess ke peran yang ditetapkan ke pengguna IAM Anda.

Buat permintaan panggilan prosedur jarak jauh Polygon (RPC) pada editor AMB Access RPC menggunakan AWS Management Console

Anda dapat mengedit, mengkonfigurasi, dan mengirimkan panggilan prosedur jarak jauh (RPC) pada AWS Management Console menggunakan AMB Access Polygon. Dengan RPC ini, Anda dapat membaca data dan menulis transaksi di jaringan Polygon, termasuk mengambil data dan mengirimkan transaksi ke jaringan Polygon.

Contoh berikut menunjukkan cara mendapatkan informasi tentang blok terbaru dengan menggunakan eth_getBlockByNumber RPC. Ubah variabel yang disorot ke input Anda sendiri atau pilih salah satu metode RPC yang terdaftar dan masukkan input yang relevan yang diperlukan.

  1. Buka konsol Managed Blockchain di https://console.aws.amazon.com/managedblockchain/.

  2. Pilih editor RPC.

  3. Di bagian Permintaan, pilih POLYGON_MAINNET sebagai Jaringan Blockchain.

  4. Pilih eth_getBlockByNumber sebagai metode RPC.

  5. Masukkan latest sebagai nomor Blokir dan pilih False sebagai bendera Transaksi penuh.

  6. Kemudian, pilih Kirim RPC.

  7. Anda mendapatkan hasil latest blok di bagian Respons. Anda kemudian dapat menyalin transaksi mentah lengkap untuk analisis lebih lanjut atau untuk digunakan dalam logika bisnis untuk aplikasi Anda.

Untuk informasi selengkapnya, lihat RPC yang didukung oleh AMB Access Polygon

Buat permintaan AMB Access Polygon JSON-RPC dengan menggunakan awscurlAWS CLI

Menandatangani permintaan dengan kredensi pengguna IAM Anda dengan menggunakan Signature Version 4 (SigV4) untuk membuat permintaan Polygon JSON-RPC ke titik akhir AMB Access Polygon. Alat baris awscurlperintah dapat membantu Anda menandatangani permintaan ke AWS layanan menggunakan SiGv4. Untuk informasi lebih lanjut, lihat awscurl README.md.

Instal awscurl dengan menggunakan metode yang sesuai dengan sistem operasi Anda. Di macOS, HomeBrew adalah aplikasi yang direkomendasikan:

brew install awscurl

Jika Anda telah menginstal dan mengonfigurasi AWS CLI, kredensi pengguna IAM Anda dan defaultnya Wilayah AWS diatur di lingkungan Anda dan memiliki akses ke. awscurl Menggunakanawscurl, kirimkan permintaan ke Polygon Mainnet dengan menjalankan RPC. eth_getBlockByNumber Panggilan ini menerima parameter string yang sesuai dengan nomor blok yang ingin Anda ambil informasinya.

Perintah berikut mengambil data blok dari Polygon Mainnet dengan menggunakan nomor blok dalam params array untuk memilih blok tertentu untuk mengambil header.

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
Tip

Anda juga dapat membuat permintaan yang sama ini menggunakan curl dan fitur akses berbasis token AMB Access menggunakan Accessor token. Untuk informasi selengkapnya, lihat Membuat dan mengelola token Accessor untuk akses berbasis token untuk membuat permintaan 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'

Respons dari salah satu perintah mengembalikan informasi tentang blok terbaru. Lihat contoh berikut untuk tujuan ilustrasi:

{"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":[]}}

Buat permintaan Polygon JSON-RPC di Node.js

Anda dapat memanggil Polygon JSON-RPC dengan mengirimkan permintaan yang ditandatangani menggunakan HTTPS untuk mengakses jaringan Polygon Mainnet menggunakan modul https asli di Node.js, atau Anda dapat menggunakan pustaka pihak ketiga seperti AXIOS. Contoh Node.js berikut menunjukkan cara membuat permintaan Polygon JSON-RPC ke titik akhir AMB Access Polygon menggunakan Signature Version 4 (SigV4) dan akses berbasis token. Contoh pertama mengirimkan transaksi dari satu alamat ke alamat lain dan contoh berikut meminta rincian transaksi dan informasi saldo dari blockchain.

Untuk menjalankan contoh skrip Node.js ini, terapkan prasyarat berikut:

  1. Anda harus memiliki node version manager (nvm) dan Node.js diinstal pada mesin Anda. Anda dapat menemukan petunjuk instalasi untuk OS Anda di sini.

  2. Gunakan node --version perintah dan konfirmasikan bahwa Anda menggunakan Node versi 18 atau lebih tinggi. Jika diperlukan, Anda dapat menggunakan nvm install v18.12.0 perintah, diikuti oleh nvm use v18.12.0 perintah, untuk menginstal versi 18, versi LTS dari Node.

  3. Variabel lingkungan AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY harus berisi kredenal yang terkait dengan akun Anda.

    Ekspor variabel ini sebagai string pada klien Anda dengan menggunakan perintah berikut. Ganti nilai dengan warna merah pada string berikut dengan nilai yang sesuai dari akun pengguna IAM Anda.

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

Setelah Anda menyelesaikan semua prasyarat, salin file berikut ke direktori di lingkungan lokal Anda dengan menggunakan editor kode pilihan Anda:

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

Awas

Kode berikut menggunakan kunci pribadi hardcode untuk menghasilkan dompet Penandatangan menggunakan Ethers.js demi demonstrasi saja. Jangan gunakan kode ini di lingkungan produksi, karena memiliki dana nyata dan menimbulkan risiko keamanan.

Jika perlu, hubungi tim akun Anda untuk memberi saran tentang praktik terbaik dompet dan Penandatangan.

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");

Setelah file-file ini disimpan ke direktori Anda, instal dependensi yang diperlukan untuk menjalankan kode menggunakan perintah berikut:

npm install

Kirim transaksi di Node.js

Contoh sebelumnya mengirimkan token Polygon Mainnet (POL) asli dari satu alamat ke alamat lain dengan menandatangani transaksi dan menyiarkannya ke Polygon Mainnet menggunakan AMB Access Polygon. Untuk melakukan ini, gunakan sendTx.js skrip, yang menggunakanEthers.js, perpustakaan populer untuk berinteraksi dengan blockchain yang kompatibel dengan Ethereum dan Ethereum seperti Polygon. Anda perlu mengganti tiga variabel dalam kode yang disorot dengan warna merah, termasuk token billingToken untuk Accessor Anda untuk akses berbasis token, kunci pribadi yang Anda gunakan untuk menandatangani transaksi, dan alamat penerima yang menerima POL.

Tip

Kami menyarankan Anda membuat kunci pribadi baru (dompet) untuk tujuan ini daripada menggunakan kembali dompet yang ada untuk menghilangkan risiko kehilangan dana. Anda dapat menggunakan metode kelas Wallet pustaka Ethers createRandom () untuk menghasilkan dompet untuk diuji. Selain itu, jika Anda perlu meminta POL dari Polygon Mainnet, Anda dapat menggunakan faucet POL publik untuk meminta sejumlah kecil untuk digunakan untuk pengujian.

Setelah Anda billingToken memiliki kunci pribadi dompet yang didanai, dan alamat penerima ditambahkan ke kode, Anda menjalankan kode berikut untuk menandatangani transaksi untuk .0001 POL untuk dikirim dari alamat Anda ke alamat lain dan menyiarkannya ke Polygon Mainnet memanggil eth_sendRawTransaction JSON-RPC menggunakan AMB Access Polygon.

node sendTx.js

Tanggapan yang diterima kembali menyerupai yang berikut:

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: [] }

Tanggapan tersebut merupakan tanda terima transaksi. Simpan nilai propertihash. Ini adalah pengenal untuk transaksi yang baru saja Anda kirimkan ke blockchain. Anda menggunakan properti ini dalam contoh transaksi baca untuk mendapatkan detail tambahan tentang transaksi ini dari Polygon Mainnet.

Perhatikan bahwa blockNumber dan blockHash berada null dalam tanggapan. Ini karena transaksi belum tercatat dalam satu blok di jaringan Polygon. Perhatikan bahwa nilai-nilai ini ditentukan nanti dan Anda mungkin melihatnya saat meminta detail transaksi di bagian berikut.

Membaca transaksi di Node.js

Pada bagian ini, Anda meminta rincian transaksi untuk transaksi yang dikirimkan sebelumnya dan mengambil saldo POL untuk alamat penerima menggunakan permintaan baca ke Polygon Mainnet menggunakan AMB Access Polygon. Dalam readTx.js file, ganti variabel berlabel your-transaction-iddengan yang hash Anda simpan dari respons dari menjalankan kode di bagian sebelumnya.

Kode ini menggunakan utilitasdispatch-evm-rpc.js, yang menandatangani permintaan HTTPS ke AMB Access Polygon dengan modul Signature Version 4 (SigV4) yang diperlukan dari AWS SDK dan mengirimkan permintaan menggunakan klien HTTP yang banyak digunakan, AXIOS.

Tanggapan yang diterima kembali menyerupai yang berikut:

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

Respons mewakili detail transaksi. Perhatikan bahwa blockHash dan blockNumber sekarang mungkin didefinisikan. Ini menunjukkan bahwa transaksi telah dicatat dalam satu blok. Jika nilai-nilai ini masihnull, tunggu beberapa menit, lalu jalankan kode lagi untuk memeriksa apakah transaksi Anda telah dimasukkan dalam blok. Terakhir, representasi heksadesimal dari saldo alamat penerima (0x110d9316ec000) dikonversi menjadi desimal menggunakan formatEther() metode Ether, yang mengubah hex menjadi desimal dan menggeser tempat desimal sebesar 18 (10^18) untuk memberikan keseimbangan sebenarnya dalam POL.

Tip

Sementara contoh kode sebelumnya menggambarkan cara menggunakan Node.js, Ether, dan Axios untuk memanfaatkan beberapa JSON-RPC yang didukung di AMB Access Polygon, Anda dapat memodifikasi contoh dan menulis kode lain untuk membangun aplikasi Anda di Polygon menggunakan layanan ini. Untuk daftar lengkap JSON-RPC yang didukung di AMB Access Polygon, lihat. API Blockchain Terkelola dan JSON-RPC didukung dengan AMB Access Polygon