

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
<a name="getting-started"></a>

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

**Topics**
+ [Buat kebijakan IAM untuk mengakses jaringan blockchain Polygon](#getting-started-next-steps)
+ [Buat permintaan panggilan prosedur jarak jauh Polygon (RPC) pada editor AMB Access RPC menggunakan Konsol Manajemen AWS](#gs-console-polygon)
+ [Buat permintaan AMB Access Polygon JSON-RPC dengan menggunakan `awscurl` AWS CLI](#awscurl-polygon-rpc-requests)
+ [Buat permintaan Polygon JSON-RPC di Node.js](#nodejs-polygon-rpc-requests)

## Buat kebijakan IAM untuk mengakses jaringan blockchain Polygon
<a name="getting-started-next-steps"></a>

Untuk mengakses titik akhir publik untuk Polygon Mainnet untuk melakukan panggilan JSON-RPC, Anda harus memiliki kredensi pengguna (`AWS_ACCESS_KEY_ID`dan`AWS_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 Anda membuat kebijakan, lampirkan kebijakan tersebut ke peran pengguna IAM agar kebijakan tersebut diterapkan. Di bagian Konsol Manajemen AWS, 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 Konsol Manajemen AWS
<a name="gs-console-polygon"></a>

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

**Example**  
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/](https://console.aws.amazon.com/managedblockchain/).

1. Pilih **editor RPC**.

1. Di bagian **Permintaan**, pilih `POLYGON_MAINNET` sebagai ***Blockchain Network***. 

1. Pilih `eth_getBlockByNumber` sebagai **metode RPC**. 

1. Masukkan **latest** sebagai ***Block number***dan pilih `False` sebagai **bendera Transaksi penuh**. 

1. Kemudian, pilih **Kirim RPC**.

1. 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 yang [RPCs didukung oleh AMB Access Polygon](https://docs.aws.amazon.com/managed-blockchain/latest/ambp-dg/polygon-api.html)

## Buat permintaan AMB Access Polygon JSON-RPC dengan menggunakan `awscurl` AWS CLI
<a name="awscurl-polygon-rpc-requests"></a>

**Example**  
Menandatangani permintaan dengan kredensi pengguna IAM Anda dengan menggunakan [Signature Version 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) untuk membuat permintaan Polygon JSON-RPC ke titik akhir AMB Access Polygon. Alat baris [https://github.com/okigan/awscurl](https://github.com/okigan/awscurl)perintah dapat membantu Anda menandatangani permintaan ke AWS layanan menggunakan SiGv4. Untuk informasi lebih lanjut, lihat [awscurl](https://github.com/okigan/awscurl#readme) 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` Menggunakan`awscurl`, 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
```
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](polygon-tokens.md).  

```
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
<a name="nodejs-polygon-rpc-requests"></a>

[Anda dapat memanggil Polygon JSON- RPCs dengan mengirimkan permintaan yang ditandatangani menggunakan HTTPS untuk mengakses jaringan Polygon *Mainnet* menggunakan [modul https asli di Node.js](https://nodejs.org/api/https.html), atau Anda dapat menggunakan pustaka pihak ketiga seperti AXIOS.](https://axios-http.com) [Contoh *Node.js* berikut menunjukkan cara membuat permintaan Polygon JSON-RPC ke titik akhir AMB Access Polygon menggunakan [Signature Version](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) 4 (SigV4) dan akses berbasis token.](https://docs.aws.amazon.com/managed-blockchain/latest/ambp-dg/polygon-tokens.html) Contoh pertama mengirimkan transaksi dari satu alamat ke alamat lain dan contoh berikut meminta rincian transaksi dan informasi saldo dari blockchain. 

**Example**  
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](https://github.com/nvm-sh/nvm).

1. 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.

1. 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*  
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
<a name="nodejs-send-transaction"></a>

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 menggunakan`Ethers.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](https://docs.aws.amazon.com/managed-blockchain/latest/ambp-dg/polygon-tokens.html), *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 properti`hash`. 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
<a name="nodejs-read-transaction"></a>

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-id`* dengan yang `hash` Anda simpan dari respons dari menjalankan kode di bagian sebelumnya.

[Kode ini menggunakan utilitas`dispatch-evm-rpc.js`, yang menandatangani permintaan HTTPS ke AMB Access Polygon dengan modul [Signature Version 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) yang diperlukan dari AWS SDK dan mengirimkan permintaan menggunakan klien HTTP yang banyak digunakan, AXIOS.](https://axios-http.com) 

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 masih`null`, 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- RPCs di AMB Access Polygon yang didukung, Anda dapat memodifikasi contoh dan menulis kode lain untuk membangun aplikasi Anda di Polygon menggunakan layanan ini. Untuk daftar lengkap RPCs JSON-on AMB Access Polygon yang didukung, lihat. [API Blockchain Terkelola dan JSON- RPCs didukung dengan AMB Access Polygon](polygon-api.md) 