Nhảy đến nội dung chính

Các RPC Endpoint

Các Account / các Contract


View account

Trả về thông tin cơ bản account.

  • method: query
  • các param:

Ví dụ:

{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "query",
"params": {
"request_type": "view_account",
"finality": "final",
"account_id": "nearkat.testnet"
}
}
Ví dụ về response nhận được:

{
"jsonrpc": "2.0",
"result": {
"amount": "399992611103597728750000000",
"locked": "0",
"code_hash": "11111111111111111111111111111111",
"storage_usage": 642,
"storage_paid_at": 0,
"block_height": 17795474,
"block_hash": "9MjpcnwW3TSdzGweNfPbkx8M74q1XzUcT1PAN8G5bNDz"
},
"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 đừ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_account:

ERROR_TYPE
error.name
ERROR_CAUSE
error.cause.name
Nguyên nhânGiải pháp
HANDLER_ERRORUNKNOWN_BLOCKBlock đ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)
  • Kiểm tra xem block được request có hợp lệ không
  • Nếu block đã được tạo ra hơn 5 epoch trước đó, hãy thử gởi request của bạn đến một archival node
INVALID_ACCOUNTaccount_id đã được request không hợp lệ
  • Cung cấp một account_id hợp lệ
UNKNOWN_ACCOUNTKhông tìm thấy account_id được request, do account chưa được tạo hoặc đã bị xóa
  • Kiểm tra lại account_id
  • Chỉ định một block khác, hoặc thử lại nếu bạn request state mới nhất
UNAVAILABLE_SHARDNode 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
  • Gởi một request đến node khác, node mà có thể track đến shard
NO_SYNCED_BLOCKSNode vẫn còn đang sync và block được request chưa có trong database
  • Chờ đến khi node sync xong
  • Gởi một request đến một node khác đã sync xong
REQUEST_VALIDATION_ERRORPARSE_ERRORĐã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...)
  • Kiểm tra lại các argument đã pass và pass lại cho đúng
  • Kiểm tra error.cause.info để biết thêm chi tiết
INTERNAL_ERRORINTERNAL_ERRORĐã xảy ra lỗi với chính node đó, hoặc bị overload
  • Hãy thử lại sau
  • Gởi một request đến một node khác
  • Kiểm tra error.cause.info để biết thêm chi tiết

Xem các thay đổi của account

Trả về các thay đổi của account từ những transaction trong một account được chỉ định.

  • method: EXPERIMENTAL_changes
  • các param:
    • changes_type: account_changes
    • account_ids: ["example.testnet"]
    • finality HOẶC block_id

Ví dụ:

{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "EXPERIMENTAL_changes",
"params": {
"changes_type": "account_changes",
"account_ids": ["your_account.testnet"],
"block_id": 19703467
}
}
Ví dụ về response nhận được:

{
"jsonrpc": "2.0",
"result": {
"block_hash": "6xsfPSG89s6fCMShxxxQTP6D4ZHM9xkGCgubayTDRzAP",
"changes": [
{
"cause": {
"type": "transaction_processing",
"tx_hash": "HLvxLKFM7gohFSqXPp5SpyydNEVpAno352qJJbnddsz3"
},
"type": "account_update",
"change": {
"account_id": "your_account.testnet",
"amount": "499999959035075000000000000",
"locked": "0",
"code_hash": "11111111111111111111111111111111",
"storage_usage": 182,
"storage_paid_at": 0
}
},
{
"cause": {
"type": "receipt_processing",
"receipt_hash": "CPenN1dp4DNKnb9LiL5hkPmu1WiKLMuM7msDjEZwDmwa"
},
"type": "account_update",
"change": {
"account_id": "your_account.testnet",
"amount": "499999959035075000000000000",
"locked": "0",
"code_hash": "11111111111111111111111111111111",
"storage_usage": 264,
"storage_paid_at": 0
}
}
]
},
"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ề bởi method EXPERIMENTAL_changes:

ERROR_TYPE
error.name
ERROR_CAUSE
error.cause.name
Nguyên nhânGiải pháp
HANDLER_ERRORUNKNOWN_BLOCKBlock đ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)
  • Kiểm tra xem block được request có hợp lệ không
  • Nếu block đã được tạo ra hơn 5 epoch trước đó, hãy thử gởi request của bạn đến một archival node
NOT_SYNCED_YETNode vẫn còn đang sync và block được request chưa có trong database
  • Chờ đến khi node sync xong
  • Gởi một request đến một node khác đã sync xong
REQUEST_VALIDATION_ERRORPARSE_ERRORĐã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...)
  • Kiểm tra lại các argument đã pass và pass lại cho đúng
  • Kiểm tra error.cause.info để biết thêm chi tiết
INTERNAL_ERRORINTERNAL_ERRORĐã xảy ra lỗi với chính node đó, hoặc bị overload
  • Hãy thử lại sau
  • Gởi một request đến một node khác
  • Kiểm tra error.cause.info để biết thêm chi tiết

Xem contract code

Trả về contract code (Wasm binary) đã được deploy trên account. Hãy lưu ý rằng code được trả về sẽ được encode bằng base64.

  • method: query
  • các param:
    • request_type: view_code
    • finality HOẶC block_id
    • account_id: "guest-book.testnet",

Ví dụ:

{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "query",
"params": {
"request_type": "view_code",
"finality": "final",
"account_id": "guest-book.testnet"
}
}
Ví dụ về response nhận được:

{
"jsonrpc": "2.0",
"result": {
"code_base64": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
"hash": "7KoFshMQkdyo5iTx8P2LbLu9jQpxRn24d27FrKShNVXs",
"block_height": 17814234,
"block_hash": "GT1D8nweVQU1zyCUv399x8vDv2ogVq71w17MyR66hXBB"
},
"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_code:

ERROR_TYPE
error.name
ERROR_CAUSE
error.cause.name
Nguyên nhânGiải pháp
HANDLER_ERRORUNKNOWN_BLOCKBlock đ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)
  • Kiểm tra xem block được request có hợp lệ không
  • Nếu block đã được tạo ra hơn 5 epoch trước đó, hãy thử gởi request của bạn đến một archival node
INVALID_ACCOUNTaccount_id đã được request không hợp lệ
  • Cung cấp một account_id hợp lệ
UNKNOWN_ACCOUNTKhông tìm thấy account_id được request, do account chưa được tạo hoặc đã bị xóa
  • Kiểm tra lại account_id
  • Chỉ định một block khác, hoặc thử lại nếu bạn request state mới nhất
NO_CONTRACT_CODEAccount không có contract nào được deploy trên nó
  • Dùng account khác
  • Chỉ định một block khác hoặc thử lại nếu bạn đang request state cuối cùng
UNAVAILABLE_SHARDNode 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
  • Gởi một request đến node khác, node mà có thể track đến shard
NO_SYNCED_BLOCKSNode vẫn còn đang sync và block được request chưa có trong database
  • Chờ đến khi node sync xong
  • Gởi một request đến một node khác đã sync xong
REQUEST_VALIDATION_ERRORPARSE_ERRORĐã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...)
  • Kiểm tra lại các argument đã pass và pass lại cho đúng
  • Kiểm tra error.cause.info để biết thêm chi tiết
INTERNAL_ERRORINTERNAL_ERRORĐã xảy ra lỗi với chính node đó, hoặc bị overload
  • Hãy thử lại sau
  • Gởi một request đến một node khác
  • Kiểm tra error.cause.info để biết thêm chi tiết

Xem contract state

Trả về state (các cặp key value) của một contract dựa trên key prefix (được encode theo base64). Truyền một string rỗng cho prefix_base64 nếu bạn muốn trả về toàn bộ state. Hãy lưu ý rằng state được trả về sẽ cũng được encode bằng base64.

  • method: query
  • các param:
    • request_type: view_state
    • finality HOẶC block_id
    • account_id: "guest-book.testnet",
    • prefix_base64: ""

Ví dụ:

{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "query",
"params": {
"request_type": "view_state",
"finality": "final",
"account_id": "guest-book.testnet",
"prefix_base64": ""
}
}
Ví dụ về response nhận được:

{
"jsonrpc": "2.0",
"result": {
"values": [
{
"key": "bTo6MA==",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJqb3NoZm9yZC50ZXN0bmV0IiwidGV4dCI6ImhlbGxvIn0=",
"proof": []
},
{
"key": "bTo6MQ==",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiY2hhZG9oIiwidGV4dCI6ImhlbGxvIGVyeWJvZHkifQ==",
"proof": []
},
{
"key": "bTo6MTA=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoic2F0b3NoaWYudGVzdG5ldCIsInRleHQiOiJIaWxsbyEifQ==",
"proof": []
},
{
"key": "bTo6MTE=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoidmFsZW50aW5lc29rb2wudGVzdG5ldCIsInRleHQiOiJIaSEifQ==",
"proof": []
},
{
"key": "bTo6MTI=",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJobngudGVzdG5ldCIsInRleHQiOiJoZWxsbyJ9",
"proof": []
},
{
"key": "bTo6MTM=",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJobngudGVzdG5ldCIsInRleHQiOiJzZCJ9",
"proof": []
},
{
"key": "bTo6MTQ=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiamdoZy50ZXN0bmV0IiwidGV4dCI6IktoZyJ9",
"proof": []
},
{
"key": "bTo6MTU=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiYWNjb3VudC50ZXN0bmV0IiwidGV4dCI6IldoZW4gSUNPPyJ9",
"proof": []
},
{
"key": "bTo6MTY=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiYWNjb3VudC50ZXN0bmV0IiwidGV4dCI6IlRlc3QgMiJ9",
"proof": []
},
{
"key": "bTo6MTc=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoidGVzdC1kcm9wLTEwLnRlc3RuZXQiLCJ0ZXh0IjoiRnJlZSBtZXNzYWdlcyBhcmUgdGhlIGJlc3QifQ==",
"proof": []
},
{
"key": "bTo6MTg=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoidGVzdC1kcm9wLTEwLnRlc3RuZXQiLCJ0ZXh0IjoiV2hlbiBJQ08/In0=",
"proof": []
},
{
"key": "bTo6MTk=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoidGVzdC1kcm9wLTEwLnRlc3RuZXQiLCJ0ZXh0IjoiV2hlbiBJQ08/In0=",
"proof": []
},
{
"key": "bTo6Mg==",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoibnVsbCIsInRleHQiOiJ1bmRlZmluZWQifQ==",
"proof": []
},
{
"key": "bTo6MjA=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoidGVzdC04NDEudGVzdG5ldCIsInRleHQiOiJXaGVuIElDTz8ifQ==",
"proof": []
},
{
"key": "bTo6MjE=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoidGVzdC04NDEudGVzdG5ldCIsInRleHQiOiJoZXkgaGV5IGhleSJ9",
"proof": []
},
{
"key": "bTo6MjI=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiam9zaGZvcmQudGVzdG5ldCIsInRleHQiOiJoaSJ9",
"proof": []
},
{
"key": "bTo6MjM=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiam9zaGZvcmQudGVzdG5ldCIsInRleHQiOiJoaSB4MiJ9",
"proof": []
},
{
"key": "bTo6MjQ=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoibWFzdGVydGh5c2VsZi50ZXN0bmV0IiwidGV4dCI6ImhhbmRzaGFrZS5oYWNrbWVkb21haW4vICJ9",
"proof": []
},
{
"key": "bTo6MjU=",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJtYXN0ZXJ0aHlzZWxmLnRlc3RuZXQiLCJ0ZXh0IjoiSGVsbG8gQ29zbW9zLCBob21lLmNvc21hdHJpeGNvbm5lY3Rpb25zLyJ9",
"proof": []
},
{
"key": "bTo6MjY=",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJtYXN0ZXJ0aHlzZWxmLnRlc3RuZXQiLCJ0ZXh0IjoiYnVpbGQsIGJ1aWxkLCBidWlsZCBpIGNhbWUgdG8gYnVpbGQgYSBicmlkZ2UgaW4gUEVBQ0UsIHNvIGNvbWUgbGV0cyBidWlsZC4uLnNvbmcgYnkgXCJOYWhrbyBCZWFyXCIgIn0=",
"proof": []
},
{
"key": "bTo6Mjc=",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJtYXN0ZXJ0aHlzZWxmLnRlc3RuZXQiLCJ0ZXh0IjoiYnVpbGQgYSBicmlkZ2UgKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3NhPXQmcmN0PWomcT0mZXNyYz1zJnNvdXJjZT13ZWImY2Q9JmNhZD1yamEmdWFjdD04JnZlZD0yYWhVS0V3ajA0ZGlnMTlqckFoV05tbGtLSGR5X0FnUVEzeXd3QUhvRUNBVVFBZyZ1cmw9aHR0cHMlM0ElMkYlMkZ3d3cueW91dHViZS5jb20lMkZ3YXRjaCUzRnYlM0Rlb1RYNWZmOVplMCZ1c2c9QU92VmF3MFoxZzFIMkZzeF85d3FJSmg5RTk2UCkifQ==",
"proof": []
},
{
"key": "bTo6Mjg=",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJtYXN0ZXJ0aHlzZWxmLnRlc3RuZXQiLCJ0ZXh0IjoiaHR0cDovL3RyaXBweS7wn42EbWFnaWMvIn0=",
"proof": []
},
{
"key": "bTo6Mjk=",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJtYXN0ZXJ0aHlzZWxmLnRlc3RuZXQiLCJ0ZXh0IjoiaHR0cDovL3VuaXRlLnJhaW5ib3d0cmliZXMvIn0=",
"proof": []
},
{
"key": "bTo6Mw==",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiam9zaGZvcmQudGVzdG5ldCIsInRleHQiOiJobW1tbW1tIn0=",
"proof": []
},
{
"key": "bTo6MzA=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiZXhlbXBsYXJ5LnRlc3RuZXQiLCJ0ZXh0IjoiaGVsbG8ifQ==",
"proof": []
},
{
"key": "bTo6MzE=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiYWRpMjMudGVzdG5ldCIsInRleHQiOiJobW0ifQ==",
"proof": []
},
{
"key": "bTo6MzI=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiYWRpMjMudGVzdG5ldCIsInRleHQiOiJ3aGF0In0=",
"proof": []
},
{
"key": "bTo6MzM=",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoidmxhZGJhc2gudGVzdG5ldCIsInRleHQiOiJIaSJ9",
"proof": []
},
{
"key": "bTo6NA==",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoibnVsbCIsInRleHQiOiIgIn0=",
"proof": []
},
{
"key": "bTo6NQ==",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJ0ZXN0YWNjb3VudDEudGVzdG5ldCIsInRleHQiOiJ0ZXN0In0=",
"proof": []
},
{
"key": "bTo6Ng==",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiZXVnZW5ldGhlZHJlYW0iLCJ0ZXh0IjoibnVsbCJ9",
"proof": []
},
{
"key": "bTo6Nw==",
"value": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiZGVtby50ZXN0bmV0IiwidGV4dCI6Ikkgb25seSB3cml0ZSBmcmVlIG1lc3NhZ2VzLiJ9",
"proof": []
},
{
"key": "bTo6OA==",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJqb3NoZm9yZC50ZXN0bmV0IiwidGV4dCI6IkkgcHJlZmVyIHByZW1pdW0gbWVzc2FnZXMifQ==",
"proof": []
},
{
"key": "bTo6OQ==",
"value": "eyJwcmVtaXVtIjp0cnVlLCJzZW5kZXIiOiJuZXdsZWRnZXIzLnRlc3RuZXQiLCJ0ZXh0IjoiTGVkZ2VyIn0=",
"proof": []
},
{
"key": "bTpsZW4=",
"value": "MzQ=",
"proof": []
}
],
"proof": [],
"block_height": 17814234,
"block_hash": "GT1D8nweVQU1zyCUv399x8vDv2ogVq71w17MyR66hXBB"
},
"id": "dontcare"
}

Chú ý

Có một giới hạn đối với các node RPC mặc định. Bạn sẽ không thể get được contract state nếu nó quá lớn. Giới hạn mặc định cho contract state là state size tối đa chỉ được 50kb. Bạn có thể thay đổi các giới hạn nếu bạn tự chạy RPC node cho mình với giá trị trie_viewer_state_size_limit đã được điều chỉnh trong config.json

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_state:

ERROR_TYPE
error.name
ERROR_CAUSE
error.cause.name
Nguyên nhânGiải pháp
HANDLER_ERRORUNKNOWN_BLOCKBlock đ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)
  • Kiểm tra xem block được request có hợp lệ không
  • Nếu block đã được tạo ra hơn 5 epoch trước đó, hãy thử gởi request của bạn đến một archival node
INVALID_ACCOUNTaccount_id đã được request không hợp lệ
  • Cung cấp một account_id hợp lệ
UNKNOWN_ACCOUNTKhông tìm thấy account_id được request, do account chưa được tạo hoặc đã bị xóa
  • Kiểm tra lại account_id
  • Chỉ định một block khác, hoặc thử lại nếu bạn đang request state mới nhất
NO_CONTRACT_CODEAccount không có contract nào được deploy trên nó
  • Hãy query một account đã được deploy contract
  • Chỉ định một block khác, hoặc thử lại nếu bạn đang request state mới nhất
TOO_LARGE_CONTRACT_STATEContract state được request quá lớn để trả về từ node này (giới hạn default là 50kb cho state size)
  • Gởi request đến một node có giới hạn lớn hơn, để có thể xem được state đó
  • Tự chạy một node của riêng bạn, để bạn có thể tăng giới hạn cho việc view state
UNAVAILABLE_SHARDNode 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
  • Gởi một request đến node khác, node mà có thể track đến shard
NO_SYNCED_BLOCKSNode vẫn còn đang sync và block được request chưa có trong database
  • Chờ đến khi node sync xong
  • Gởi một request đến một node khác đã sync xong
REQUEST_VALIDATION_ERRORPARSE_ERRORĐã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...)
  • Kiểm tra lại các argument đã pass và pass lại cho đúng
  • Kiểm tra error.cause.info để biết thêm chi tiết
INTERNAL_ERRORINTERNAL_ERRORĐã xảy ra lỗi với chính node đó, hoặc bị overload
  • Hãy thử lại sau
  • Gởi một request đến một node khác
  • Kiểm tra error.cause.info để biết thêm chi tiết

Xem các thay đổi của contract state

Trả về các chi tiết thay đổi cho state của một contract, dựa vào key prefix (được encode bằng base64). Truyền một string rỗng cho param này nếu bạn muốn trả về toàn bộ các thay đổi của state.

  • method: EXPERIMENTAL_changes
  • các param:
    • changes_type: data_changes
    • account_ids: ["example.testnet"],
    • key_prefix_base64: "base64 encoded key value",
    • finality HOẶC block_id

Ví dụ:

{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "EXPERIMENTAL_changes",
"params": {
"changes_type": "data_changes",
"account_ids": ["guest-book.testnet"],
"key_prefix_base64": "",
"block_id": 19450732
}
}
Ví dụ về response nhận được:

{
"jsonrpc": "2.0",
"result": {
"block_hash": "6U8Yd4JFZwJUNfqkD4KaKgTKmpNSmVRTSggpjmsRWdKY",
"changes": [
{
"cause": {
"type": "receipt_processing",
"receipt_hash": "9ewznXgs2t7vRCssxW4thgaiwggnMagKybZ7ryLNTT2z"
},
"type": "data_update",
"change": {
"account_id": "guest-book.testnet",
"key_base64": "bTo6Mzk=",
"value_base64": "eyJwcmVtaXVtIjpmYWxzZSwic2VuZGVyIjoiZmhyLnRlc3RuZXQiLCJ0ZXh0IjoiSGkifQ=="
}
},
{
"cause": {
"type": "receipt_processing",
"receipt_hash": "9ewznXgs2t7vRCssxW4thgaiwggnMagKybZ7ryLNTT2z"
},
"type": "data_update",
"change": {
"account_id": "guest-book.testnet",
"key_base64": "bTpsZW4=",
"value_base64": "NDA="
}
}
]
},
"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ề bởi method EXPERIMENTAL_changes:

ERROR_TYPE
error.name
ERROR_CAUSE
error.cause.name
Nguyên nhânGiải pháp
HANDLER_ERRORUNKNOWN_BLOCKBlock đ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)
  • Kiểm tra xem block được request có hợp lệ không
  • Nếu block đã được tạo ra hơn 5 epoch trước đó, hãy thử gởi request của bạn đến một archival node
NOT_SYNCED_YETNode vẫn còn đang sync và block được request chưa có trong database
  • Chờ đến khi node sync xong
  • Gởi một request đến một node khác đã sync xong
REQUEST_VALIDATION_ERRORPARSE_ERRORĐã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...)
  • Kiểm tra lại các argument đã pass và pass lại cho đúng
  • Kiểm tra error.cause.info để biết thêm chi tiết
INTERNAL_ERRORINTERNAL_ERRORĐã xảy ra lỗi với chính node đó, hoặc bị overload
  • Hãy thử lại sau
  • Gởi một request đến một node khác
  • Kiểm tra error.cause.info để biết thêm chi tiết

Xem các thay đổi của contract code

Trả về các thay đổi của code được tạo ra khi deploy một contract. Thay đổi được trả về dưới dạng WASM file được encode bằng base64.

  • method: EXPERIMENTAL_changes
  • các param:
    • changes_type: contract_code_changes
    • account_ids: ["example.testnet"],
    • finality HOẶC block_id

Ví dụ:

{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "EXPERIMENTAL_changes",
"params": {
"changes_type": "contract_code_changes",
"account_ids": ["dev-1602714453032-7566969"],
"block_id": 20046655
}
}
Ví dụ về response nhận được:

{
"jsonrpc": "2.0",
"result": {
"block_hash": "3yLNV5zdpzRJ8HP5xTXcF7jdFxuHnmKNUwWcok4616WZ",
"changes": [
{
"cause": {
"type": "receipt_processing",
"receipt_hash": "CEm3NNaNdu9cijh9NvZMM1srbtEYSsBVwGbZxFQYKt5B"
},
"type": "contract_code_update",
"change": {
"account_id": "dev-1602714453032-7566969",
"code_base64": "AGFzbQEAAAABpAM3YAF/AGAAAX9gAn9+AGADf35+AGAEf35+fgF+YAZ/fn5+fn4BfmADf35+AX5gAn9+AX5gAn9/AX9gAn9/AGADf39/AX9gAX8BfmACfn4AYAF+AX5gAX4AYAABfmADfn5+AGAAAGAIfn5+fn5+fn4BfmAJfn5+fn5+fn5+AX5gAn5+AX5gA35+fgF+YAd+fn5+fn5+AGAEfn5+fgBgCX5+fn5+fn5+fgBgBX5+fn5+AX5gA39/fwBgAX8Bf2ACf3wAYAR/f39+AGAFf39/fn8AYAV/f39/fwBgBH9/f38AYAN/f38BfmADf39+AGACf38BfmAFf39/f38Bf2AEf39/fwF/YAZ/f39/f38AYAV/f35/fwBgBH9+f38Bf2ACf34Bf2AHf35+f39+fwBgBX9/f39+AGAEf35+fgBgCX9+fn5+fn5+fgF+YAp/fn5+fn5+fn5+AX5gCH9+fn5+fn5+AGAFf35+fn4AYAp/fn5+fn5+fn5+AGAHf39/f39/fwBgBH98f38Bf2AGf39/f39..."
}
}
]
},
"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ề bởi method EXPERIMENTAL_changes:

ERROR_TYPE
error.name
ERROR_CAUSE
error.cause.name
Nguyên nhânGiải pháp
HANDLER_ERRORUNKNOWN_BLOCKBlock đ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)
  • Kiểm tra xem block được request có hợp lệ không
  • If the block had been produced more than 5 epochs ago, try to send your request to an archival node
NOT_SYNCED_YETNode vẫn còn đang sync và block được request chưa có trong database
  • Chờ đến khi node sync xong
  • Gởi một request đến một node khác đã sync xong
REQUEST_VALIDATION_ERRORPARSE_ERRORĐã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...)
  • Kiểm tra lại các argument đã pass và pass lại cho đúng
  • Kiểm tra error.cause.info để biết thêm chi tiết
INTERNAL_ERRORINTERNAL_ERRORĐã xảy ra lỗi với chính node đó, hoặc bị overload
  • Hãy thử lại sau
  • Gởi một request đến một node khác
  • Kiểm tra error.cause.info để biết thêm chi tiết

Call một contract function

Cho phép bạn call một contract method như một view function.

  • method: query
  • các param:
    • request_type: call_function
    • finality HOẶC block_id
    • account_id: "example.testnet"
    • method_name: name_of_a_example.testnet_method
    • args_base64: method_arguments_base_64_encoded

Ví dụ:

{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "query",
"params": {
"request_type": "call_function",
"finality": "final",
"account_id": "dev-1588039999690",
"method_name": "get_num",
"args_base64": "e30="
}
}
Ví dụ response nhận được:

{
"jsonrpc": "2.0",
"result": {
"result": [48],
"logs": [],
"block_height": 17817336,
"block_hash": "4qkA4sUUG8opjH5Q9bL5mWJTnfR4ech879Db1BZXbx6P"
},
"id": "dontcare"
}

Lưu ý: [48] là một array của các byte, cụ thể nó là một ASCII code của 0.near-sdk-rsnear-sdk-as trả về các kết quả đã được JSON-serialize.

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 call_function:

ERROR_TYPE
error.name
ERROR_CAUSE
error.cause.name
Nguyên nhânGiải pháp
HANDLER_ERRORUNKNOWN_BLOCKBlock đ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)
  • Kiểm tra xem block được request có hợp lệ không
  • Nếu block đã được tạo ra hơn 5 epoch trước đó, hãy thử gởi request của bạn đến một archival node
INVALID_ACCOUNTaccount_id đã được request không hợp lệ
  • Cung cấp một account_id hợp lệ
UNKNOWN_ACCOUNTKhông tìm thấy account_id được request, do account chưa được tạo hoặc đã bị xóa
  • Kiểm tra lại account_id
  • Chỉ định một block khác, hoặc thử lại nếu bạn đang request state mới nhất
NO_CONTRACT_CODEKhông tìm thấy contract_code đã được request khi đang view
  • Hãy kiểm tra public_key
  • Chỉ định một block khác, hoặc thử lại nếu bạn đang request state mới nhất
CONTRACT_EXECUTION_ERRORKhông thực hiện được view method call (bị crash, hết giới hạn 200 TGas mặc định, v.v.)
  • Kiểm tra error.cause.info để biết thêm chi tiết
UNAVAILABLE_SHARDNode 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
  • Gởi một request đến node khác, node mà có thể track đến shard
NO_SYNCED_BLOCKSNode vẫn còn đang sync và block được request chưa có trong database
  • Chờ đến khi node sync xong
  • Gởi một request đến một node khác đã sync xong
REQUEST_VALIDATION_ERRORPARSE_ERRORĐã pass các argument mà JSON RPC server không thể parse được (thiếu các argument, sai format, v.v...)
  • Kiểm tra lại các argument đã pass và pass lại cho đúng
  • Kiểm tra error.cause.info để biết thêm chi tiết
INTERNAL_ERRORINTERNAL_ERRORĐã xảy ra lỗi với chính node đó, hoặc bị overload
  • Hãy thử lại sau
  • Gởi một request đến một node khác
  • Kiểm tra error.cause.info để biết thêm chi tiết