안녕하세요 @realmankwon입니다.
RC(Resource Credites)를 이용하여 계정을 생성하는 기능을 개발하였습니다.
RC가 특정값 이상이 되면 계정을 생성하는 것인데 getAccount api에는 그 값이 없었습니다.
그래서 어떻게 그 값을 알 수 있는지 검색해서 찾긴 했지만 curl을 이용한 것 밖에 찾지 못했습니다.
curl을 이용한 RC의 근거 데이터를 찾는 방법은 다음과 같습니다.
1 ) Example curl
curl -s --data '{"jsonrpc":"2.0", "method":"rc_api.find_rc_accounts", "params":{"accounts":["steemit"]}, "id":1}' https://api.steemit.com
2 ) Expected Response JSON
{
"rc_accounts": [
{
"account": "",
"rc_manabar": {"current_mana": "0", "last_update_time": 0},
"max_rc_creation_adjustment": {
"amount": "0",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": "0"
}
]
}
curl 대신에 axios를 사용하여 호출하도록 하였습니다.
curl의 -s 명령어는 post를 방식을 뜻하는 것이고 --data는 response의 data 값을 의미하는 것입니다.
그래서 axios.post로 https://api.steemit.com 주소를 호출하고 param는 동일하게 전달했습니다.
결과값이 동일하게 나오는 것을 확인하고는 RC 를 계산하는 함수를 작성했습니다.
계산 공식은 @nhj12311의 포스팅을 참조하였습니다.
원문 : https://busy.org/@nhj12311/steem-apps-rc
getResourceCredits: (account) => {
return new Promise(async(resolve, reject) => {
try{
const params={"jsonrpc":"2.0", "method":"rc_api.find_rc_accounts", "params":{"accounts":[account]}, "id":1};
const result = await axios.post("https://api.steemit.com", params);
const rc = result.data.result.rc_accounts[0]
const STEEM_RC_MANA_REGENERATION_SECONDS =432000;
const estimated_max = parseFloat(rc.max_rc);
const current_mana = parseFloat(rc.rc_manabar.current_mana);
const last_update_time = parseFloat(rc.rc_manabar.last_update_time);
const diff_in_seconds = Math.round(Date.now()/1000-last_update_time);
let estimated_mana = (current_mana + diff_in_seconds * estimated_max / STEEM_RC_MANA_REGENERATION_SECONDS);
if (estimated_mana > estimated_max)
estimated_mana = estimated_max;
const estimated_pct = estimated_mana / estimated_max * 100;
resolve(estimated_pct);
}
catch(err){
reject(err);
}
});
},
덕분에 RC가 정상적으로 계산을 할 수 있었고 계정 클레임도 순조롭게 할 수 있었습니다.
어서 SCT 운영진 내부적으로 필요한 기능들을 일단락 지어야겠습니다.
불금!!! 즐거운 시간되세요 ^^