# Install
npm i @proton/api
# Instantiation
import { ApiClass } from '@proton/api'
const protonApi = new ApiClass('proton')
# Get Table Rows
In the example shown below, the xtokens smart contract's table accounts is queried with the scope testacc. The data is returned as json, in-order, and limited to 10 rows. The RAM payer for the returned row is also not shown.
await protonApi.rpc.get_table_rows({
json: true,
code: 'xtokens',
scope: 'testacc',
table: 'accounts',
limit: 10,
reverse: false,
show_payer: false
})
An example of an expected response is shown below.
{
rows: [ { balance: '200.000000 XUSDC' }, { balance: '50.00000000 XBTC' } ],
more: false
}
The following is a list of acceptable arguments:
Argument | Type | Required | Description |
---|---|---|---|
json | boolean | false | Get the response as json |
code | string | true | Contract that we target |
scope | string | true | Account that owns the data |
table | string | true | Table name |
lower_bound | any | false | Lower limit for key value |
upper_bound | any | false | Upper limit for key value |
index_position | number | false | Table index (1: primary, 2: secondary) |
key_type | any | false | Table key type |
limit | number | false | Maximum number of rows that we want to get |
reverse | boolean | false | Get reversed data |
show_payer | boolean | false | Show ram payer |
# Query By Index
A lower_bound parameter can also be passed to the get_table_rows method. This parameter allows you to query for a particular value of the primary key in the table. Using this in conjunction with limit: 1 allows you to query for 1 row of a table.
@table("profiles")
export class Profiles extends Table {
constructor (
public user: Name = new Name(),
public age: u64 = 0,
public surname: Name = new Name(),
) {
super();
}
@primary
get primary(): u64 {
return this.user.N;
}
}
In the example shown below, the contract smart contract's table profiles is queried with the scope contract for the row with primary key testacc. The limit is 1 which implies that only 1 row with value testacc will be returned.
await protonApi.rpc.get_table_rows({
json: true,
code: 'contract',
scope: 'contract',
table: 'profiles',
lower_bound: 'testacc',
limit: 1,
reverse: false,
show_payer: false,
})
An example of an expected response is shown below.
{
"rows": [{
"user": "testacc",
"age": 21,
"surname": "Martin"
}
],
"more": false
}
# Query By Secondary Index
The lower_bound parameter can be used in conjunction with the index_position parameter to query an index different from the primary key.
@table("profiles")
export class Profiles extends Table {
constructor (
public user: Name = new Name(),
public age: u64 = 0,
public surname: Name = new Name(),
) {
super();
}
@primary
get primary(): u64 {
return this.user.N;
}
@secondary
get byAge(): u64 {
return this.age;
}
set byAge(value: u64) {
this.age = value;
}
@secondary
get bySurname(): u64 {
return this.surname.N;
}
set bySurname(value: u64) {
this.surname.N = value;
}
}
In the example shown below, the contract smart contract's table profiles is queried with the scope contract for the rows with secondary index age equal to 21. The limit is 1 which implies that only 1 row with the age 21 will be returned.
await protonApi.rpc.get_table_rows({
json: true,
code: 'contract',
scope: 'contract',
table: 'profiles',
index_position: 2,
lower_bound: 21,
limit: 1,
reverse: false,
show_payer: false,
})