Study/클레이튼
caver-js : 서비스 체인 연동
uooy
2021. 12. 14. 17:28
node js v17.2.0 사용
프로젝트 구조
- main.js : 'libs' 폴더의 caver 함수를 사용하는 main 함수를 담은 파일
- libs : caver-js 를 이용하여 만든 함수(라이브러리)를 모아놓은 폴더
- provider.js : Service Chain 과 연결하는 provider 파일
코드
1. provider.js
require('dotenv').config(); // 전역 변수(.env파일에 선언한 변수)를 사용하기 위함
const Caver = require('caver-js'); //caver-js 객체 선언
const caver = new Caver(process.env.SCN_URL); // Service Chain Provider - server ip:scn port
module.exports = caver;
2. libs/*.js
require('dotenv').config();
const fs = require('fs');
const caver = require('../provider'); // provider.js 에서 export한 caver import
class Example {
...
/*
* scn에서의 송금 트랜잭션 발생
* scn에 있는 account만 허용
*/
sendKlay = async (from,to,value)=> {
try{
const tx = await caver.transaction.valueTransfer.create({
from: from,
to : to,
value : caver.utils.convertToPeb(`${value}`,'KLAY'),
gas : 50000
});
await caver.rpc.klay.sendTransaction(tx).then(console.log);
}catch(err){
console.log(err)
}
}
...
}
const example = new Example()
module.exports = example
3. main.js
const example = require('./libs/example');
const run = ()=>{
...
let readline = require('readline');
let r = readline.createInterface({
input:process.stdin,
output:process.stdout
})
...
r.question('from : ',async (from)=>{
r.question('to : ', async (to)=>{
r.question('value : ', async(value)=>{
keyring.sendKlay(from,to,value);
})
})
});
...
}
run();
실행 & 결과
1. SCN (Service Chain Node) 에서 account 및 잔액 확인
2. node js환경에서 caver-js로 송금 트랜잭션 발생
3.SCN에서 트랜잭션 조회 및 잔액 조회
4. 송금 후 잔액 조회