Links
Comment on page

RPC API 사용하기

아래는 Symverse Blockchain 의 RPC API 를 호출하는 방식에 대한 설명 문서입니다.
블록체인 노드에서 제공하는 JSON RPC API를 Node 환경에서 편리하게 사용하기 위해 자바스크립트 언어로 변환한 코드입니다. 노드에서 제공하는 상세한 API 가 궁금하시다면 해당 링크를 참고해 주시기 바랍니다.

Smverse 노드 접속

API를 호출하기 위해선 노드 접속 코드를 작성해야합니다.

정의된 테스트넷(Test-net)/메인넷(Main-net) 연결

const symjs = SymJs();
const gsym = symjs.utils.fromNetwork('MAINNET'); // 테스트넷은 "TESTNET"을 넣습니다
symjs.network.connect(gsym.url).then(connectedMessage => {
console.log(connectedMessage, 'connect success...')
}).catch(e => {
// connected fail...
})
// Promise 객체 리턴

로컬 혹은 URL 직접 연결

const symjs = SymJs();
symjs.network.connect('http://localhost:8584').then(connectedMessage => {
console.log(connectedMessage, 'connect success...')
}).catch(e => {
// connected fail...
})

블록체인 데이터 호출하기

블록체인에 기록된 정보(Block, Transaction, Citiz, SCT) 를 조회하기 위해서 아래와 같이 작성합니다.

Block 조회

메인 블록 정보를 조회합니다.
const result = await symjs.network.call.getBlockByHash("0x5223c591adad8b8f9c674e4c5ee03bb2a7584ec048180bef902901d338510660", true)
{
activeCbNum: '0x22d',
activeObNum: '0x0',
activeWbNum: '0x1be',
cbHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
cbNum: '0x0',
extraData: '0xd683010310846773796d86676f312e3230856c696e7578',
gasLimit: '0xb3c36a0',
gasUsed: '0x0',
hash: '0x5223c591adad8b8f9c674e4c5ee03bb2a7584ec048180bef902901d338510660',
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
number: '0x1884f20',
obHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
obNum: '0x0',
parentHash: '0x922692ee85bb751a4828b1d4df2e1fc67d743bb5d14c80017d36b74a5c1f91a1',
primary: '0x0002231c150e06ff0002',
receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
rewardRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
rewards: [],
sctRoot: '0x590fcf015c74cfe2f1aba6466122e494ebb81b4f8f47362787ad39220b9c98e1',
signInfo: {
mbNum: '0x1884f20',
sign: '0x79cf6778bb8b9cfc64bfe32e93c0d1b300e092136987b61fdaef566a03ed025313611694486fc90ae50f468a0730acb1ec486955dd4ed87e546f18550c7ad2a9',
extraData: '0x'
},
size: '0x3fc',
stateRoot: '0x88172652495b8bcebc7eef525abd65873a5fd0e92369da71ffcb7971852fdc2c',
tickStamp: '0xc3085b',
timeStamp: '0x64a7a6ea',
transactions: [],
transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
validatorInfos: [
'0x00027b746c655e570002',
'0x0002aba49d958e870002',
'0x0002e4ddd6ce8d860002',
'0x0002fdf5eee7e0d80002',
'0x00028078716a635b0002',
'0x0002a69f989189820002',
'0x0002d2cbc3bcb5ae0002',
'0x0002544d463e37300002',
'0x0002a19a928b847d0002',
'0x0002a69e979089810002',
'0x0002fdf6efe8e0d90002',
'0x0002f8f1e9e2dbd40002',
'0x0002ccc5beb7afa80002',
'0x0002100902fbf3b20002',
'0x0002282119120b040002',
'0x0002d1cac3bbb4ad0002',
'0x0002756e2d261f180002',
'0x000249423b332c250002',
'0x00027f787069625b0002',
'0x000229211a130c050002',
'0x00024f474039322a0002',
'0x0002534c453e362f0002',
'0x00027a736c645d560002',
'0x0002aea7a09991500002'
],
wbHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
wbNum: '0x1be'
}

Balance 조회

블록에 기록된 symid의 amount 를 조회합니다.
const result = await symjs.network.call.getBalance(testSymId)
const sym = symjs.utils.toSym(result) // sym 단위로 변환
11618.746650933996

Transaction 조회

트랜잭션 해시(hash) 기반으로 조회 합니다.
const result = await symjs.network.call.getTransactionByHash("0x10e29156518e5015867f85a44ef528b222dcab812d439c77858f5f04dd81e6eb")
{
blockHash: '0x7e391af4be549b066043b4e601da087a8c2e22a0c83e3ef3a7040896fcce0cd8',
blockNumber: '0x18d1f09',
from: '0x0002afc5b2b55a270002',
gas: '0xbf68',
gasPrice: '0x174876e800',
hash: '0x10e29156518e5015867f85a44ef528b222dcab812d439c77858f5f04dd81e6eb',
input: '0x',
nonce: '0x65',
to: '0x00020000000000010002',
transactionIndex: '0x0',
type: '0x0',
workNodes: [ '0x0002cdc6bfb7b0a90002' ],
value: '0x5',
extraData: '0x',
v: '0x0',
r: '0xeba63613cb5359d58dd768557bb59696f312a52a68397cab7f3aa8e62bd70ded',
s: '0x52ac995fba5e60dda9a9c0ef703a6b6267244710becc665f1a48a379973b5120'
}

Transaction Receipt 조회

트랜잭션 해시(hash) 기반으로 영수증을 조회 합니다.
let result = await symjs.network.call.getTransactionReceipt("0x10e29156518e5015867f85a44ef528b222dcab812d439c77858f5f04dd81e6eb")
{
blockHash: '0x7e391af4be549b066043b4e601da087a8c2e22a0c83e3ef3a7040896fcce0cd8',
blockNumber: '0x18d1f09',
contractAddress: null,
cumulativeGasUsed: '0xbf68',
from: '0x0002afc5b2b55a270002',
gasUsed: '0xbf68',
logs: [],
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
status: '0x1',
to: '0x00020000000000010002',
transactionHash: '0x10e29156518e5015867f85a44ef528b222dcab812d439c77858f5f04dd81e6eb',
transactionIndex: '0x0'
}

Transaction Nonce 조회

유저의 SymID가 현재까지 발행한 트랜잭션 count를 조회합니다.
const result = await symjs.network.call.getTransactionCount(testSymId, PENDING_BLOCK)
2412

Citizen 정보 조회

Sym ID 기반으로 Citizen 정보를 조회 합니다
const result = await symjs.network.call.citizen.getCitizenBySymID('0x00024f48413a322b0002');
{
ca: '0x00020000000000010002',
aKeyPubH: '0xe254b299769d0cc780d6f685986dedc5f847bca7', // 해당 symid의 public hash key
nonce: '0x0',
vFlag: '0x0',
country: '0x0',
status: '0x1',
credit: '0x0',
role: '0x1',
refCode: '0x0',
writeTime: '0x0'
}

SCT 정보 조회

SCT21 (ERC20 Like Token) 조회

SCT API를 통해 생성된 Token의 정보를 조회합니다
const result = await symjs.network.call.sct.getContract('0xffa5f6161966dde56342');
{
creator: '0x0002aea7a09991500002',
lock: '0x0',
name: 'SYMVERSE',
owner: '0x0002aea7a09991500002',
state: 'active',
stateCode: '0x0',
symbol: 'SYM',
total: '0x3635c9adc5dea00000',
type: 'sct21'
}

SCT30 (ERC721 Like Token) 조회

SCT API를 통해 생성된 Token의 정보를 조회합니다
const result = await symjs.network.call.sct.getContract('0xff99634a959fa3347f22');
{
creator: '0x00024f48413a322b0002',
name: 'COMY_TOKEN_19_0x0002d8aef146424b0002',
owner: '0x00024f48413a322b0002',
state: 'active',
stateCode: '0x0',
symbol: 'COMY',
total: '0x4',
type: 'sct30'
}

SCT20 (ERC20 Like Token) Balance 조회

블록에 기록된 SCT기반의 amount를 조회합니다.
const result = await symjs.network.call.sct.getContractAccount('0xffa5f6161966dde56342', '0x0002aea7a09991500002');
const amount symjs.utils.toSym(result.balance)
1000

SCT30 (ERC721 Like Token) Items 조회

블록에 기록된 SCT기반의 item을 조회합니다.
const result = await symjs.network.call.sct.getContractAccount('0xff99634a959fa3347f22, '0x0002d8aef146424b0002');
[ 1, 2, 3, 4 ]