Các RPC Endpoint
Ví dụ:
View access key
Trả về thông tin một single access key của một account được chỉ định.
Nếu permission
của key là FunctionCall
, nó sẽ trả về chi tiết hơn, ví dụ như allowance
, receiver_id
, và method_names
.
- method:
query
- các param:
- JSON
- JavaScript
- HTTPie
{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "query",
"params": {
"request_type": "view_access_key",
"finality": "final",
"account_id": "client.chainlink.testnet",
"public_key": "ed25519:H9k5eiU4xXS3M4z8HzKJSLaZdqGdGwBG49o7orNC4eZW"
}
}
const response = await near.connection.provider.query({
request_type: "view_access_key",
finality: "final",
account_id: "client.chainlink.testnet",
public_key: "ed25519:H9k5eiU4xXS3M4z8HzKJSLaZdqGdGwBG49o7orNC4eZW",
});
http post https://rpc.testnet.near.org jsonrpc=2.0 id=dontcare method=query \
params:='{
"request_type": "view_access_key",
"finality": "final",
"account_id": "client.chainlink.testnet",
"public_key": "ed25519:H9k5eiU4xXS3M4z8HzKJSLaZdqGdGwBG49o7orNC4eZW"
}'
Ví dụ về response nhận được:
{
"jsonrpc": "2.0",
"result": {
"nonce": 85,
"permission": {
"FunctionCall": {
"allowance": "18501534631167209000000000",
"receiver_id": "client.chainlink.testnet",
"method_names": ["get_token_price"]
}
},
"block_height": 19884918,
"block_hash": "GGJQ8yjmo7aEoj8ZpAhGehnq9BSWFx4xswHYzDwwAP2n"
},
"id": "dontcare"
}
Sự cố nào có thể xảy ra?
Khi API request không thành công, RPC server sẽ trả về một error response được cấu trúc sẵn, với một số lượng giới hạn các error variant đã được định nghĩa rõ ràng, từ đó client code có thể handle toàn bộ các error case có thể xảy ra. Các JSON-RPC error của chúng tôi tuân theo convention verror để cấu trúc cho error response:
{
"error": {
"name": <ERROR_TYPE>,
"cause": {
"info": {..},
"name": <ERROR_CAUSE>
},
"code": -32000,
"data": String,
"message": "Server error",
},
"id": "dontcare",
"jsonrpc": "2.0"
}
Chú ý
Các field
code
,data
, vàmessage
trong structure trên là những field kế thừa từ Verror và có thể không được dùng nữa trong tương lai. Do đó vui lòng không sử dụng chúng.
Dưới đây là danh sách đầy đủ các error variant có thể được trả về theo loại request view_access_key
:
ERROR_TYPE | ERROR_CAUSEerror.cause.name | Status Code | Nguyên nhân | Giải pháp |
---|---|---|---|---|
HANDLER_ERROR | UNKNOWN_BLOCK | 200 | Block đang được request chưa được tạo ra, hoặc nó đã được garbage-collect (dọn dẹp để tiết kiệm dung lượng trên node RPC) |
|
INVALID_ACCOUNT | 200 | account_id đã được request không hợp lệ |
| |
UNKNOWN_ACCOUNT | 200 | Không tìm thấy account_id được request, do account chưa được tạo hoặc đã bị xóa |
| |
UNKNOWN_ACCESS_KEY | 200 | Không tìm thấy public_key , do public key chưa được tạo hoặc đã bị xóa |
| |
UNAVAILABLE_SHARD | 200 | Node không thể tìm thấy data được request, vì nó không track đến shard mà dữ liệu tồn tại |
| |
NO_SYNCED_BLOCKS | 200 | Node vẫn còn đang sync và block được request chưa có trong database |
| |
REQUEST_VALIDATION_ERROR | PARSE_ERROR | 400 | Đã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...) |
|
INTERNAL_ERROR | INTERNAL_ERROR | 500 | Đã xảy ra lỗi với chính node đó, hoặc bị overload |
|
View access key list
You can query all access keys for a given account.
- method:
query
- các param:
Dưới đây là danh sách đầy đủ các error variant có thể được trả về theo loại request view_access_key_list
:
- JSON
- JavaScript
- HTTPie
{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "query",
"params": {
"request_type": "view_access_key_list",
"finality": "final",
"account_id": "example.testnet"
}
}
const response = await near.connection.provider.query({
request_type: "view_access_key_list",
finality: "final",
account_id: "example.testnet",
});
http post https://rpc.testnet.near.org jsonrpc=2.0 id=dontcare method=query \
params:='{
"request_type": "view_access_key_list",
"finality": "final",
"account_id": "example.testnet"
}'
Ví dụ về response nhận được:
{
"jsonrpc": "2.0",
"result": {
"keys": [
{
"public_key": "ed25519:2j6qujbkPFuTstQLLTxKZUw63D5Wu3SG79Gop5JQrNJY",
"access_key": {
"nonce": 17,
"permission": {
"FunctionCall": {
"allowance": "9999203942481156415000",
"receiver_id": "place.meta",
"method_names": []
}
}
}
},
{
"public_key": "ed25519:46etzhzZHN4NSQ8JEQtbHCX7sT8WByS3vmSEb3fbmSgf",
"access_key": {
"nonce": 2,
"permission": {
"FunctionCall": {
"allowance": "9999930655034196535000",
"receiver_id": "dev-1596616186817-8588944",
"method_names": []
}
}
}
},
{
"public_key": "ed25519:4F9TwuSqWwvoyu7JVZDsupPhC7oYbYNsisBV2yQvyXFn",
"access_key": {
"nonce": 0,
"permission": "FullAccess"
}
},
{
"public_key": "ed25519:4bZqp6nm1btr92UfKbyADDzJ4oPK9JetHXqEYqbYZmkD",
"access_key": {
"nonce": 2,
"permission": "FullAccess"
}
},
{
"public_key": "ed25519:6ZPzX7hS37jiU9dRxbV1Waf8HSyKKFypJbrnZXzNhqjs",
"access_key": {
"nonce": 2,
"permission": {
"FunctionCall": {
"allowance": "9999922083697042955000",
"receiver_id": "example.testnet",
"method_names": []
}
}
}
},
{
"public_key": "ed25519:81RKfuo7mBbsaviTmBsq18t6Eq4YLnSi3ye2CBLcKFUX",
"access_key": {
"nonce": 8,
"permission": "FullAccess"
}
},
{
"public_key": "ed25519:B4W1oAYTcG8GxwKev8jQtsYWkGwGdqP24W7eZ6Fmpyzc",
"access_key": {
"nonce": 0,
"permission": {
"FunctionCall": {
"allowance": "10000000000000000000000",
"receiver_id": "dev-1594144238344",
"method_names": []
}
}
}
},
{
"public_key": "ed25519:BA3AZbACoEzAsxKeToFd36AVpPXFSNhSMW2R6UYeGRwM",
"access_key": {
"nonce": 0,
"permission": {
"FunctionCall": {
"allowance": "10000000000000000000000",
"receiver_id": "new-corgis",
"method_names": []
}
}
}
},
{
"public_key": "ed25519:BRyHUGAJjRKVTc9ZqXTTSJnFmSca8WLj8TuVe1wXK3LZ",
"access_key": {
"nonce": 17,
"permission": "FullAccess"
}
},
{
"public_key": "ed25519:DjytaZ1HZ5ZFmH3YeJeMCiC886K1XPYeGsbz2E1AZj2J",
"access_key": {
"nonce": 31,
"permission": "FullAccess"
}
},
{
"public_key": "ed25519:DqJn5UCq6vdNAvfhnbpdAeuui9a6Hv9DKYDxeRACPUDP",
"access_key": {
"nonce": 0,
"permission": "FullAccess"
}
},
{
"public_key": "ed25519:FFxG8x6cDDyiErFtRsdw4dBNtCmCtap4tMTjuq3umvSq",
"access_key": {
"nonce": 0,
"permission": "FullAccess"
}
}
],
"block_height": 17798231,
"block_hash": "Gm7YSdx22wPuciW1jTTeRGP9mFqmon69ErFQvgcFyEEB"
},
"id": "dontcare"
}
Sự cố nào có thể xảy ra?
Khi API request không thành công, RPC server sẽ trả về một error response được cấu trúc sẵn, với một số lượng giới hạn các error variant đã được định nghĩa rõ ràng, từ đó client code có thể handle toàn bộ các error case có thể xảy ra. Các JSON-RPC error của chúng tôi tuân theo convention verror để cấu trúc cho error response:
{
"error": {
"name": <ERROR_TYPE>,
"cause": {
"info": {..},
"name": <ERROR_CAUSE>
},
"code": -32000,
"data": String,
"message": "Server error",
},
"id": "dontcare",
"jsonrpc": "2.0"
}
Chú ý
Các field
code
,data
, vàmessage
trong structure trên là những field kế thừa từ Verror và có thể không được dùng nữa trong tương lai. Do đó vui lòng không sử dụng chúng.
Dưới đây là danh sách đầy đủ các error variant có thể được trả về theo loại request view_access_key_list
:
ERROR_TYPE | ERROR_CAUSEerror.cause.name | Status Code | Nguyên nhân | Giải pháp |
---|---|---|---|---|
HANDLER_ERROR | UNKNOWN_BLOCK | 200 | Block đang được request chưa được tạo ra, hoặc nó đã được garbage-collect (dọn dẹp để tiết kiệm dung lượng trên node RPC) |
|
INVALID_ACCOUNT | 200 | Node vẫn còn đang sync và block được request chưa có trong database |
| |
UNKNOWN_ACCOUNT | 200 | Không tìm thấy account_id được request, do account chưa được tạo hoặc đã bị xóa |
| |
UNAVAILABLE_SHARD | 200 | Node không thể tìm thấy data được request, vì nó không track đến shard mà dữ liệu tồn tại |
| |
NO_SYNCED_BLOCKS | 200 | Node vẫn còn đang sync và block được request chưa có trong database |
| |
REQUEST_VALIDATION_ERROR | PARSE_ERROR | 400 | Đã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...) |
|
INTERNAL_ERROR | INTERNAL_ERROR | 500 | Đã xảy ra lỗi với chính node đó, hoặc bị overload |
|
Các thay đổi View access key (đơn)
Trả về các thay đổi riêng lẻ của access key trong một block cụ thể. Bạn có thể query nhiều key bằng cách pass một array các object có chứa account_id
và public_key
.
- method:
EXPERIMENTAL_changes
- các param:
Ví dụ:
- JSON
- JavaScript
- HTTPie
{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "EXPERIMENTAL_changes",
"params": {
"changes_type": "single_access_key_changes",
"keys": [
{
"account_id": "example-acct.testnet",
"public_key": "ed25519:25KEc7t7MQohAJ4EDThd2vkksKkwangnuJFzcoiXj9oM"
}
],
"finality": "final"
}
}
const response = await near.connection.provider.experimental_changes({
changes_type: "single_access_key_changes",
keys: [
{
account_id: "example-acct.testnet",
public_key: "ed25519:25KEc7t7MQohAJ4EDThd2vkksKkwangnuJFzcoiXj9oM",
},
],
finality: "final",
});
http post https://rpc.testnet.near.org jsonrpc=2.0 id=dontcare method=EXPERIMENTAL_changes \
params:='{
"changes_type": "single_access_key_changes",
"keys": [
{
"account_id": "example-acct.testnet",
"public_key": "ed25519:25KEc7t7MQohAJ4EDThd2vkksKkwangnuJFzcoiXj9oM"
}
],
"finality": "final"
}'
Ví dụ về response nhận được:
{
"jsonrpc": "2.0",
"result": {
"block_hash": "4kvqE1PsA6ic1LG7S5SqymSEhvjqGqumKjAxnVdNN3ZH",
"changes": [
{
"cause": {
"type": "transaction_processing",
"tx_hash": "HshPyqddLxsganFxHHeH9LtkGekXDCuAt6axVgJLboXV"
},
"type": "access_key_update",
"change": {
"account_id": "example-acct.testnet",
"public_key": "ed25519:25KEc7t7MQohAJ4EDThd2vkksKkwangnuJFzcoiXj9oM",
"access_key": {
"nonce": 1,
"permission": "FullAccess"
}
}
}
]
},
"id": "dontcare"
}
What Could Go Wrong?
Khi API request không thành công, RPC server sẽ trả về một error response được cấu trúc sẵn, với một số lượng giới hạn các error variant đã được định nghĩa rõ ràng, từ đó client code có thể handle toàn bộ các error case có thể xảy ra. Các JSON-RPC error của chúng tôi tuân theo convention verror để cấu trúc cho error response:
{
"error": {
"name": <ERROR_TYPE>,
"cause": {
"info": {..},
"name": <ERROR_CAUSE>
},
"code": -32000,
"data": String,
"message": "Server error",
},
"id": "dontcare",
"jsonrpc": "2.0"
}
Chú ý
Các field
code
,data
, vàmessage
trong structure trên là những field kế thừa từ Verror và có thể không được dùng nữa trong tương lai. Do đó vui lòng không sử dụng chúng.
Dưới đây là danh sách đầy đủ các error variant có thể được trả về bởi method EXPERIMENTAL_changes
:
ERROR_TYPE | ERROR_CAUSEerror.cause.name | Status Code | Nguyên nhân | Giải pháp |
---|---|---|---|---|
HANDLER_ERROR | UNKNOWN_BLOCK | 200 | Block đang được request chưa được tạo ra, hoặc nó đã được garbage-collect (dọn dẹp để tiết kiệm dung lượng trên node RPC) |
|
NOT_SYNCED_YET | 200 | Node vẫn còn đang sync và block được request chưa có trong database |
| |
REQUEST_VALIDATION_ERROR | PARSE_ERROR | 400 | Đã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...) |
|
INTERNAL_ERROR | INTERNAL_ERROR | 500 | Đã xảy ra lỗi với chính node đó, hoặc bị overload |
|
Các thay đổi View access key (tất cả)
Trả về các thay đổi đến tất cả các access key của một block được chỉ định. Có thể query nhiều tài khoản bằng cách pass một array của account_ids
.
- method:
EXPERIMENTAL_changes
- các param:
Dưới đây là danh sách đầy đủ các error variant có thể được trả về theo loại request view_access_key_list
:
- JSON
- JavaScript
- HTTPie
{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "EXPERIMENTAL_changes",
"params": {
"changes_type": "all_access_key_changes",
"account_ids": ["example-acct.testnet"],
"block_id": "4kvqE1PsA6ic1LG7S5SqymSEhvjqGqumKjAxnVdNN3ZH"
}
}
const response = await near.connection.provider.experimental_changes({
changes_type: "all_access_key_changes",
account_ids: "example-acct.testnet",
finality: "final",
});
http post https://rpc.testnet.near.org jsonrpc=2.0 id=dontcare method=EXPERIMENTAL_changes \
params:='{
"changes_type": "all_access_key_changes",
"account_ids": ["example-acct.testnet"],
"block_id": "4kvqE1PsA6ic1LG7S5SqymSEhvjqGqumKjAxnVdNN3ZH"
}'
Các kết quả cuối cùng của transaction có thể được query qua Transaction Status hoặc NEAR Explorer bằng cách sử dụng kết quả
hash được trả về như ví dụ sau đây.
{
"jsonrpc": "2.0",
"result": {
"block_hash": "4kvqE1PsA6ic1LG7S5SqymSEhvjqGqumKjAxnVdNN3ZH",
"changes": [
{
"cause": {
"type": "transaction_processing",
"tx_hash": "HshPyqddLxsganFxHHeH9LtkGekXDCuAt6axVgJLboXV"
},
"type": "access_key_update",
"change": {
"account_id": "example-acct.testnet",
"public_key": "ed25519:25KEc7t7MQohAJ4EDThd2vkksKkwangnuJFzcoiXj9oM",
"access_key": {
"nonce": 1,
"permission": "FullAccess"
}
}
},
{
"cause": {
"type": "receipt_processing",
"receipt_hash": "CetXstu7bdqyUyweRqpY9op5U1Kqzd8pq8T1kqfcgBv2"
},
"type": "access_key_update",
"change": {
"account_id": "example-acct.testnet",
"public_key": "ed25519:96pj2aVJH9njmAxakjvUMnNvdB3YUeSAMjbz9aRNU6XY",
"access_key": {
"nonce": 0,
"permission": "FullAccess"
}
}
}
]
},
"id": "dontcare"
}
What Could Go Wrong?
Khi API request không thành công, RPC server sẽ trả về một error response được cấu trúc sẵn, với một số lượng giới hạn các error variant đã được định nghĩa rõ ràng, từ đó client code có thể handle toàn bộ các error case có thể xảy ra. Các JSON-RPC error của chúng tôi tuân theo convention verror để cấu trúc cho error response:
{
"error": {
"name": <ERROR_TYPE>,
"cause": {
"info": {..},
"name": <ERROR_CAUSE>
},
"code": -32000,
"data": String,
"message": "Server error",
},
"id": "dontcare",
"jsonrpc": "2.0"
}
Chú ý
Các field
code
,data
, vàmessage
trong structure trên là những field kế thừa từ Verror và có thể không được dùng nữa trong tương lai. Do đó vui lòng không sử dụng chúng.
Ví dụ:
ERROR_TYPE | ERROR_CAUSEerror.cause.name | Status Code | Nguyên nhân | Giải pháp |
---|---|---|---|---|
HANDLER_ERROR | UNKNOWN_BLOCK | 200 | Block đang được request chưa được tạo ra, hoặc nó đã được garbage-collect (dọn dẹp để tiết kiệm dung lượng trên node RPC) |
|
NOT_SYNCED_YET | 200 | Node vẫn còn đang sync và block được request chưa có trong database |
| |
REQUEST_VALIDATION_ERROR | PARSE_ERROR | 400 | Đã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...) |
|
INTERNAL_ERROR | INTERNAL_ERROR | 500 | Đã xảy ra lỗi với chính node đó, hoặc bị overload |
|