FIO -- Read performance of state access in FIO, overview
Purpose
The purpose of this document is to describe an approach that may be used to analyze FIO read performance of state in the FIO chain plugin and FIO contracts. Specifically it will:
Document all of the uses of get table rows within the chain plugin within fio.
Analyze each from a “read performance” perspective and publish a list of the reads along with a level of concern for each.
Decide on next steps.
Summary of Results and Next Steps
The “Deploy high-powered / modified API plugin” solution was determined to be the easiest solution to deploy and it maintains decentralization. The analysis is tracked here. Development and rollout will be tracked in FIP-46 and this epic.
Alternative Options
Option | Status | Description | Pros | Cons | Centralized | Dev Effort Low: weeks | QA Effort Low: 1 week | Data Migration Effort |
---|---|---|---|---|---|---|---|---|
Table redesign and migration | Not viable | Redesign tables with proper scope and/or indexes and migrate data to new tables |
|
| No | High | Med - High | High |
Possible medium to long term solution | Create secondary lookup tables alongside existing tables |
|
| No | Med | Med | Med | |
Large transaction solution | An off-chain database can be created and the data indexed for specific lookups.
|
|
| Yes | Med-High | High | High | |
Off-chain - block crawling |
| Crawl each block looking for specific transactions and index those into a local database |
|
| Yes | Med (depends on validation) | Low | Low (if you have someone who knows history nodes) |
#2? | Can a history node solve any of this? Initial research shows this may be an offline centralized solution. Needs further research with exchange integrators. |
|
| No |
|
|
| |
Brute force searches (as a service) | #3? | Runtime Javascript code to page through the entire table and pull out needed data. Could be deployed as an API service endpoint on AWS or an integrator can deploy the code in their wallet. |
|
| Yes | Low | Low | Low |
Brute force searches (via SDK) | #3? | First try simple version, if more data, do the more complex query. |
|
| No |
|
|
|
#1 | Remove cpu and other limits on query time for fio API node |
|
| No | Low | Med | Low | |
Deploy high-powered / modified API node that we host | #1.b |
|
|
| Yes |
|
|
|
Limits on number of table entries | Not viable | Put limits in the contracts for table size (as we do for mapped addresses). |
|
|
| Low | Low | Low |
Results: FIO Getters
Endpoint | Location | Table | get_table_rows lookup | Index | Limits |
get_escrow_listings | ./chain_plugin.cpp:1813: ./chain_plugin.cpp:1823: |
|
|
|
|
get_pending_fio_requests | ./chain_plugin.cpp:1933: ./chain_plugin.cpp:1943: | fiotrxtss | .code = fio.reqobt | uint64_t by_payerstat() const { return payer_account + static_cast<uint64_t>(fio_data_type); }
enum class trxstatus {
requested = 0,
rejected = 1,
sent_to_blockchain = 2,
cancelled = 3,
obt_action = 4,
other = 5 //Future Use
};
| Limit If account has > 2000 of |
get_cancelled_fio_requests | ./chain_plugin.cpp:2027: ./chain_plugin.cpp:2037: | fiotrxtss | .code = fio.reqobt | uint64_t by_payeestat() const { return payee_account + static_cast<uint64_t>(fio_data_type); }
| Limit If account has > 2000 of |
get_received_fio_requests | ./chain_plugin.cpp:2122: ./chain_plugin.cpp:2132: | fiotrxtss | .code = fio.reqobt |
| Limit If account has > 2000 of (requested, rejected, sent_to_blockchain, cancelled) it will not return them all. |
get_sent_fio_requests | ./chain_plugin.cpp:2225: ./chain_plugin.cpp:2235: | fiotrxtss | .code = fio.reqobt |
| If account has > 2000 of ( |
get_obt_data | ./chain_plugin.cpp:2225: ./chain_plugin.cpp:2235: | fiotrxtss | .code = fio.reqobt and .index_position = 12 (by_payeeobt) | Returns records of sent_to_blockchain or obt_action
| If account has > 2000 of |
get_nfts_fio_address | ./chain_plugin.cpp:2450: ./chain_plugin.cpp:2459: |
| .code = fio.address | If FIO Crypto Handle has > 2000 nfts mapped it will not return them all. | |
get_nfts_hash | ./chain_plugin.cpp:2516: ./chain_plugin.cpp:2525: |
| .code = fio.address | If there are > 2000 nfts with the specified hash, it will not return them all. | |
get_nfts_contract | ./chain_plugin.cpp:2585: ./chain_plugin.cpp:2594: |
| .code = fio.address | If there are > 2000 nfts with the specified contract address, it will not return them all. | |
get_fio_names | ./chain_plugin.cpp:2681: ./chain_plugin.cpp:2691: ./chain_plugin.cpp:2724: ./chain_plugin.cpp:2733: |
| .code = fio.address This also returns all domains associated with the account. | If the account has > 2000 crypto handles, it will not return them all. | |
get_fio_domains | ./chain_plugin.cpp:2800: ./chain_plugin.cpp:2809: |
| .code = fio.address | If the account has > 2000 domains, it will not return them all. | |
get_fio_addresses | ./chain_plugin.cpp:2880: ./chain_plugin.cpp:2890: |
|
|
|
|
get_pub_addresses | ./chain_plugin.cpp:3580: ./chain_plugin.cpp:3589: ./chain_plugin.cpp:3610: ./chain_plugin.cpp:3619: |
|
|
|
|
All endpoints list.
Endpoint | Location | Description and parameters | Read Performance Rating and Notes |
Fio — chain plugin | ./include/eosio/chain_plugin/chain_plugin.hpp:385: ./include/eosio/chain_plugin/chain_plugin.hpp:401: ./include/eosio/chain_plugin/chain_plugin.hpp:406: ./include/eosio/chain_plugin/chain_plugin.hpp:515: ./include/eosio/chain_plugin/chain_plugin.hpp:885: ./include/eosio/chain_plugin/chain_plugin.hpp:888: ./include/eosio/chain_plugin/chain_plugin.hpp:889: ./include/eosio/chain_plugin/chain_plugin.hpp:890: ./include/eosio/chain_plugin/chain_plugin.hpp:988: ./include/eosio/chain_plugin/chain_plugin.hpp:989: ./include/eosio/chain_plugin/chain_plugin.hpp:990: ./include/eosio/chain_plugin/chain_plugin.hpp:1651: ./include/eosio/chain_plugin/chain_plugin.hpp:1654: |
|
|
get_table_index | ./chain_plugin.cpp:1493: |
|
|
get_locks | ./chain_plugin.cpp:1659: ./chain_plugin.cpp:1669: |
|
|
get_escrow_listings | ./chain_plugin.cpp:1813: ./chain_plugin.cpp:1823: |
|
|
get_pending_fio_requests | ./chain_plugin.cpp:1933: ./chain_plugin.cpp:1943: |
|
|
get_cancelled_fio_requests | ./chain_plugin.cpp:2027: ./chain_plugin.cpp:2037: |
|
|
get_received_fio_requests | ./chain_plugin.cpp:2122: ./chain_plugin.cpp:2132: |
|
|
get_sent_fio_requests | ./chain_plugin.cpp:2225: ./chain_plugin.cpp:2235: |
|
|
get_obt_data | ./chain_plugin.cpp:2324: ./chain_plugin.cpp:2334: ./chain_plugin.cpp:2340: ./chain_plugin.cpp:2350: |
|
|
get_nfts_fio_address | ./chain_plugin.cpp:2450: ./chain_plugin.cpp:2459: |
|
|
get_nfts_hash | ./chain_plugin.cpp:2516: ./chain_plugin.cpp:2525: |
|
|
get_nfts_contract | ./chain_plugin.cpp:2585: ./chain_plugin.cpp:2594: |
|
|
GetFIOAccount | ./chain_plugin.cpp:2641: ./chain_plugin.cpp:2644: ./chain_plugin.cpp:2655: |
|
|
get_fio_names | ./chain_plugin.cpp:2681: ./chain_plugin.cpp:2691: ./chain_plugin.cpp:2724: ./chain_plugin.cpp:2733: |
|
|
get_fio_domains | ./chain_plugin.cpp:2800: ./chain_plugin.cpp:2809: |
|
|
get_fio_addresses | ./chain_plugin.cpp:2880: ./chain_plugin.cpp:2890: |
|
|
get_staking_row | Chain_plugin .cpp:2943. |
|
|
get_fio_balance | ./chain_plugin.cpp:2976: ./chain_plugin.cpp:2986: ./chain_plugin.cpp:2987: ./chain_plugin.cpp:3016: ./chain_plugin.cpp:3026: ./chain_plugin.cpp:3027: ./chain_plugin.cpp:3039: ./chain_plugin.cpp:3049: ./chain_plugin.cpp:3100: ./chain_plugin.cpp:3110: |
|
|
get_fee | ./chain_plugin.cpp:3201: ./chain_plugin.cpp:3211: ./chain_plugin.cpp:3239: ./chain_plugin.cpp:3248: |
|
|
get_oracle_fees | ./chain_plugin.cpp:3287: ./chain_plugin.cpp:3293: ./chain_plugin.cpp:3294: |
|
|
get_whitelist | ./chain_plugin.cpp:3349: ./chain_plugin.cpp:3359: |
|
|
check_whitelist | ./chain_plugin.cpp:3395: ./chain_plugin.cpp:3405: |
|
|
get_pub_address | ./chain_plugin.cpp:3448: ./chain_plugin.cpp:3449: ./chain_plugin.cpp:3450: ./chain_plugin.cpp:3460: ./chain_plugin.cpp:3469: ./chain_plugin.cpp:3490: ./chain_plugin.cpp:3499: ./chain_plugin.cpp:3570: ./chain_plugin.cpp:3571: ./chain_plugin.cpp:3572: |
|
|
get_pub_addresses | ./chain_plugin.cpp:3580: ./chain_plugin.cpp:3589: ./chain_plugin.cpp:3610: ./chain_plugin.cpp:3619: |
|
|
avail_check | ./chain_plugin.cpp:3685: ./chain_plugin.cpp:3686: ./chain_plugin.cpp:3687: ./chain_plugin.cpp:3693: ./chain_plugin.cpp:3703: ./chain_plugin.cpp:3713: ./chain_plugin.cpp:3723: |
|
|
get_table_rows | ./chain_plugin.cpp:3749: ./chain_plugin.cpp:3760: ./chain_plugin.cpp:3769: ./chain_plugin.cpp:3773: ./chain_plugin.cpp:3779: ./chain_plugin.cpp:3782: ./chain_plugin.cpp:3784: ./chain_plugin.cpp:3789: ./chain_plugin.cpp:3798: ./chain_plugin.cpp:3801: |
|
|
get_account | ./chain_plugin.cpp:6481: ./chain_plugin.cpp:6492: |
|
|
Contract Actions
For each contract action we will perform a summary analysis of the read performance.
Data to be collected:
Detail the following parameters accessed in get_table_rows
contract
scope
table
index type used (primary or secondary index, and index used).
Publish a description as necessary to illuminate the limitations or performance factors of the read.
Rate the endpoint according to:
1) GREEN — the read functions well and has no identifiable limits or issues.
2) YELLOW— the read has paging capability but users are forced to query many times to get desired data.
3) RED — this read is severely limited and will not function beyond a certain amount of data associated with the read.
Endpoint | Location | Description and parameters | Read Performance Rating and Notes |
Tpidclaim | ./contracts/fio.treasury/fio.treasury.cpp:80: |
|
|
bpclaim | ./contracts/fio.treasury/fio.treasury.cpp:141: |
|
|
setabi | ./contracts/eosio.bios/include/eosio.bios/eosio.bios.hpp:194: |
|
|
autoproxy | ./contracts/fio.tpid/fio.tpid.cpp:37: |
|
|
process_auto_proxy | ./contracts/fio.tpid/fio.tpid.cpp:69: |
|
|
updatetpid | ./contracts/fio.tpid/fio.tpid.cpp:105: |
|
|
rewardspaid | ./contracts/fio.tpid/fio.tpid.cpp:130: |
|
|
computeusablebalance | ./contracts/fio.token/include/fio.token/fio.token.hpp:169: |
|
|
computeremaininglockedtokens | ./contracts/fio.token/include/fio.token/fio.token.hpp:201: |
|
|
computegenerallockedtokens | ./contracts/fio.token/include/fio.token/fio.token.hpp:399: |
|
|
Create | ./contracts/fio.token/src/fio.token.cpp:27: |
|
|
Issue | ./contracts/fio.token/src/fio.token.cpp:42: |
|
|
retire | ./contracts/fio.token/src/fio.token.cpp:89: |
|
|
can_transfer | ./contracts/fio.token/src/fio.token.cpp:158: |
|
|
transfer_public_key | ./contracts/fio.token/src/fio.token.cpp:262: |
|
|
transfer | ./contracts/fio.token/src/fio.token.cpp:449: |
|
|
trnsfiopubky | ./contracts/fio.token/src/fio.token.cpp:488: |
|
|
trnsloctoks | ./contracts/fio.token/src/fio.token.cpp:544: |
|
|
add_balance | ./contracts/fio.token/src/fio.token.cpp:650: |
|
|
accountmgnt | ./contracts/fio.address/fio.address.cpp:68: |
|
|
addburnq | ./contracts/fio.address/fio.address.cpp:68: |
|
|
getBundledAmount | ./contracts/fio.address/fio.address.cpp:167: |
|
|
fio_address_update | ./contracts/fio.address/fio.address.cpp:202: |
|
|
fio_domain_update | ./contracts/fio.address/fio.address.cpp:269: |
|
|
perform_remove_address | ./contracts/fio.address/fio.address.cpp:301: |
|
|
perform_remove_all_addresses | ./contracts/fio.address/fio.address.cpp:417: |
|
|
chain_data_update | ./contracts/fio.address/fio.address.cpp:518: |
|
|
regaddress | ./contracts/fio.address/fio.address.cpp:706: |
|
|
regdomain | ./contracts/fio.address/fio.address.cpp:775: |
|
|
renewdomain | ./contracts/fio.address/fio.address.cpp:840: |
|
|
renewaddress | ./contracts/fio.address/fio.address.cpp:928: |
|
|
burnexpired | ./contracts/fio.address/fio.address.cpp:1015: |
|
|
addnft | ./contracts/fio.address/fio.address.cpp:1249: |
|
|
remnft | ./contracts/fio.address/fio.address.cpp:1444: |
|
|
remallnfts | ./contracts/fio.address/fio.address.cpp:1594: |
|
|
burnnfts | ./contracts/fio.address/fio.address.cpp:1687: |
|
|
setdomainpub | ./contracts/fio.address/fio.address.cpp:1733: |
|
|
bind2eosio | ./contracts/fio.address/fio.address.cpp:1823: |
|
|
xferaddress | ./contracts/fio.address/fio.address.cpp:1858: |
|
|
burnaddress | ./contracts/fio.address/fio.address.cpp:1959: |
|
|
xferdomain | ./contracts/fio.address/fio.address.cpp:2043: |
|
|
addbundles | ./contracts/fio.address/fio.address.cpp:2118: |
|
|
decrcounter | ./contracts/fio.address/fio.address.cpp:2177: |
|
|
xferescrow | ./contracts/fio.address/fio.address.cpp:2210: |
|
|
listdomain | ./contracts/fio.escrow/fio.escrow.cpp:97: |
|
|
cxlistdomain | ./contracts/fio.escrow/fio.escrow.cpp:206: |
|
|
buydomain | ./contracts/fio.escrow/fio.escrow.cpp:302: |
|
|
setmrkplcfg | ./contracts/fio.escrow/fio.escrow.cpp:429: |
|
|
stakefio | ./contracts/fio.staking/fio.staking.cpp:100: |
|
|
unstakefio | ./contracts/fio.staking/fio.staking.cpp:264: |
|
|
propose | ./contracts/eosio.msig/src/eosio.msig.cpp:65: |
|
|
approve | ./contracts/eosio.msig/src/eosio.msig.cpp:172: |
|
|
unapprove | ./contracts/eosio.msig/src/eosio.msig.cpp:226: |
|
|
cancel | ./contracts/eosio.msig/src/eosio.msig.cpp:280: |
|
|
exec | ./contracts/eosio.msig/src/eosio.msig.cpp:320: |
|
|
invalidate | ./contracts/eosio.msig/src/eosio.msig.cpp:376: |
|
|
set_auto_proxy | ./contracts/fio.common/fio.common.hpp:262: |
|
|
process_rewards | ./contracts/fio.common/fio.common.hpp:295: |
|
|
processbucketrewards | ./contracts/fio.common/fio.common.hpp:368: |
|
|
updatepower | ./contracts/fio.system/src/delegate_bandwidth.cpp:69: |
|
|
burnaction | ./contracts/fio.system/src/voting.cpp:43: |
|
|
regiproducer | ./contracts/fio.system/src/voting.cpp:92: |
|
|
regproduce | ./contracts/fio.system/src/voting.cpp:171: |
|
|
unregprod | ./contracts/fio.system/src/voting.cpp:252: |
|
|
update_elected_producers | ./contracts/fio.system/src/voting.cpp:343: |
|
|
voteproducer | ./contracts/fio.system/src/voting.cpp:462: |
|
|
voteproxy | ./contracts/fio.system/src/voting.cpp:588: |
|
|
inhibitunlck | ./contracts/fio.system/src/voting.cpp:710: |
|
|
get_votable_balance | ./contracts/fio.system/src/voting.cpp:740: |
|
|
update_votes | ./contracts/fio.system/src/voting.cpp:818: |
|
|
updlocked | ./contracts/fio.system/src/voting.cpp:929: |
|
|
setautoproxy | ./contracts/fio.system/src/voting.cpp:951: |
|
|
crautoproxy | ./contracts/fio.system/src/voting.cpp:975: |
|
|
unregproxy | ./contracts/fio.system/src/voting.cpp:1010: |
|
|
regproxy | ./contracts/fio.system/src/voting.cpp:1079: |
|
|
regiproxy | ./contracts/fio.system/src/voting.cpp:1166: |
|
|
propagate_weight_change | ./contracts/fio.system/src/voting.cpp:1217: |
|
|
onblock | ./contracts/fio.system/src/producer_pay.cpp:44: |
|
|
resetclaim | ./contracts/fio.system/src/producer_pay.cpp:64: |
|
|
updlbpclaim | ./contracts/fio.system/src/producer_pay.cpp:76: |
|
|
rmvproducer | ./contracts/fio.system/src/fio.system.cpp:84: |
|
|
setabi | ./contracts/fio.system/src/fio.system.cpp:185: |
|
|
addgenlocked | ./contracts/fio.system/src/fio.system.cpp:246: |
|
|
modgenlocked | ./contracts/fio.system/src/fio.system.cpp:295: |
|
|
clrgenlocked | ./contracts/fio.system/src/fio.system.cpp:317: |
|
|
wraptokens | ./contracts/fio.oracle/fio.oracle.cpp:137: |
|
|
unwraptokens | ./contracts/fio.oracle/fio.oracle.cpp:189: |
|
|
regoracle | ./contracts/fio.oracle/fio.oracle.cpp:266: |
|
|
unregoracle | ./contracts/fio.oracle/fio.oracle.cpp:298: |
|
|
setoraclefee | ./contracts/fio.oracle/fio.oracle.cpp:318: |
|
|
wrapdomain | /contracts/fio.oracle/fio.oracle.cpp:387: |
|
|
unwrapdomain | /contracts/fio.oracle/fio.oracle.cpp:506: |
|
|
update_fees | ./contracts/fio.fee/fio.fee.cpp:82: |
|
|
setfeevote | ./contracts/fio.fee/fio.fee.cpp:172: |
|
|
bundlevote | ./contracts/fio.fee/fio.fee.cpp:332: |
|
|
setfeemult | ./contracts/fio.fee/fio.fee.cpp:415: |
|
|
mandatoryfee | ./contracts/fio.fee/fio.fee.cpp:519: |
|
|
bytemandfee | ./contracts/fio.fee/fio.fee.cpp:556: |
|
|
createfee | ./contracts/fio.fee/fio.fee.cpp:608: |
|
|
migrtrx | ./contracts/fio.request.obt/fio.request.obt.cpp:65: |
|
|
recordobt | ./contracts/fio.request.obt/fio.request.obt.cpp:157: |
|
|
newfundsreq | ./contracts/fio.request.obt/fio.request.obt.cpp:354: |
|
|
rejectfndreq | ./contracts/fio.request.obt/fio.request.obt.cpp:513: |
|
|
cancelfndreq | ./contracts/fio.request.obt/fio.request.obt.cpp:650: |
|
|
Data
The following is a list of Identified uses of get table rows.
Fio — chain plugin
./include/eosio/chain_plugin/chain_plugin.hpp:385:
./include/eosio/chain_plugin/chain_plugin.hpp:401:
./include/eosio/chain_plugin/chain_plugin.hpp:406:
./include/eosio/chain_plugin/chain_plugin.hpp:515:
./include/eosio/chain_plugin/chain_plugin.hpp:885:
./include/eosio/chain_plugin/chain_plugin.hpp:888:
./include/eosio/chain_plugin/chain_plugin.hpp:889:
./include/eosio/chain_plugin/chain_plugin.hpp:890:
./include/eosio/chain_plugin/chain_plugin.hpp:988:
./include/eosio/chain_plugin/chain_plugin.hpp:989:
./include/eosio/chain_plugin/chain_plugin.hpp:990:
./include/eosio/chain_plugin/chain_plugin.hpp:1651:
./include/eosio/chain_plugin/chain_plugin.hpp:1654:
get_table_index
./chain_plugin.cpp:1493:
get_locks
./chain_plugin.cpp:1659:
./chain_plugin.cpp:1669:
get_escrow_listings
./chain_plugin.cpp:1813:
./chain_plugin.cpp:1823:
get_pending_fio_requests
./chain_plugin.cpp:1933:
./chain_plugin.cpp:1943:
get_cancelled_fio_requests
./chain_plugin.cpp:2027:
./chain_plugin.cpp:2037:
get_received_fio_requests
./chain_plugin.cpp:2122:
./chain_plugin.cpp:2132:
get_sent_fio_requests
./chain_plugin.cpp:2225:
./chain_plugin.cpp:2235:
get_obt_data
./chain_plugin.cpp:2324:
./chain_plugin.cpp:2334:
./chain_plugin.cpp:2340:
./chain_plugin.cpp:2350:
get_nfts_fio_address
./chain_plugin.cpp:2450:
./chain_plugin.cpp:2459:
get_nfts_hash
./chain_plugin.cpp:2516:
./chain_plugin.cpp:2525:
get_nfts_contract
./chain_plugin.cpp:2585:
./chain_plugin.cpp:2594:
GetFIOAccount
./chain_plugin.cpp:2641:
./chain_plugin.cpp:2644:
./chain_plugin.cpp:2655:
get_fio_names
./chain_plugin.cpp:2681:
./chain_plugin.cpp:2691:
./chain_plugin.cpp:2724:
./chain_plugin.cpp:2733:
get_fio_domains
./chain_plugin.cpp:2800:
./chain_plugin.cpp:2809:
get_fio_addresses
./chain_plugin.cpp:2880:
./chain_plugin.cpp:2890:
get_staking_row
Chain_plugin .cpp:2943.
get_fio_balance
./chain_plugin.cpp:2976:
./chain_plugin.cpp:2986:
./chain_plugin.cpp:2987:
./chain_plugin.cpp:3016:
./chain_plugin.cpp:3026:
./chain_plugin.cpp:3027:
./chain_plugin.cpp:3039:
./chain_plugin.cpp:3049:
./chain_plugin.cpp:3100:
./chain_plugin.cpp:3110:
get_fee
./chain_plugin.cpp:3201:
./chain_plugin.cpp:3211:
./chain_plugin.cpp:3239:
./chain_plugin.cpp:3248:
get_oracle_fees
./chain_plugin.cpp:3287:
./chain_plugin.cpp:3293:
./chain_plugin.cpp:3294:
get_whitelist
./chain_plugin.cpp:3349:
./chain_plugin.cpp:3359:
check_whitelist
./chain_plugin.cpp:3395:
./chain_plugin.cpp:3405:
get_pub_address
./chain_plugin.cpp:3448:
./chain_plugin.cpp:3449:
./chain_plugin.cpp:3450:
./chain_plugin.cpp:3460:
./chain_plugin.cpp:3469:
./chain_plugin.cpp:3490:
./chain_plugin.cpp:3499:
./chain_plugin.cpp:3570:
./chain_plugin.cpp:3571:
./chain_plugin.cpp:3572:
get_pub_addresses
./chain_plugin.cpp:3580:
./chain_plugin.cpp:3589:
./chain_plugin.cpp:3610:
./chain_plugin.cpp:3619:
avail_check
./chain_plugin.cpp:3685:
./chain_plugin.cpp:3686:
./chain_plugin.cpp:3687:
./chain_plugin.cpp:3693:
./chain_plugin.cpp:3703:
./chain_plugin.cpp:3713:
./chain_plugin.cpp:3723:
get_table_rows
./chain_plugin.cpp:3749:
./chain_plugin.cpp:3760:
./chain_plugin.cpp:3769:
./chain_plugin.cpp:3773:
./chain_plugin.cpp:3779:
./chain_plugin.cpp:3782:
./chain_plugin.cpp:3784:
./chain_plugin.cpp:3789:
./chain_plugin.cpp:3798:
./chain_plugin.cpp:3801:
get_account
./chain_plugin.cpp:6481:
./chain_plugin.cpp:6492: