체인의정석

Klaytn 컨트렉트 백엔드에서 서명하는 방법 본문

개발/backend

Klaytn 컨트렉트 백엔드에서 서명하는 방법

체인의정석 2022. 6. 13. 14:42
728x90
반응형

일단 개발환경으로는 자바스크립트 및 caver.js를 사용하였으며,

공식문서 구글 등등을 살펴봐도 계속해서 에러가 발생하여 깃허브의 코드를 참고 하였다.

https://github.com/klaybank/arbitrager/blob/a2b82b9c6db933fd93968bd89a5a714dcfb02aa9/index.js

 

GitHub - klaybank/arbitrager

Contribute to klaybank/arbitrager development by creating an account on GitHub.

github.com

 

1. ABI 에 대한 선언

 

ABI를 선언할 때 다양한 방법이 있겠지만 결국 JSON.parse를 하면서 공백을 제거해 주어야 한다.

내가 선택한 방법은 우선 따로 ABI를 모아둔 파일을 만들어서 모듈화 시킨 후 이를 문자화 시키고 공백을 제거한 후 가져다가 쓰는 것이다.

const { ExampleABI } = require('../../../abi_constant');

const ABIString = JSON.stringify(ExampleABI);
const ABI = JSON.parse(ABIString.trim());

 

이 때 abi_constants에는

const ABI이름 = [ ... ]
module.exports = {
  ABI이름
}

이와 같이 사용하였다.

 

2. 트랜잭션 서명하기

먼저 컨트렉트에 대한 객체부터 만들어 주어야 한다. 예전에는 안보이던 keyring을 사용하여 지갑에 더한 후 accounts를 만들고 나서야 send와 call등이 사용가능했다.

const keyring = caver.wallet.keyring.createFromPrivateKey(`0x${process.env.DEPLOYER_PK}`)
caver.wallet.add(keyring)
caver.klay.accounts.wallet.add(
caver.klay.accounts.createWithAccountKey(keyring.address, keyring.key.privateKey))
  
const bridge = new caver.klay.Contract(exampleABI, contractAddress);

이후 컨트렉트에 접근해서 특정 함수를 실행하기 위한 코드는 다음과 같다.

  const tx = await bridge.methods.exampleFunction(
    input
  ).send({from: PublicKey, gas: 0x81B320, gasPrice: 250000000000}) 
  // gas 및 gasPrice는 고정값

이후에 결과 값을 가져오는 방식은 상황에 맞게 구현하면 된다.

 

// calling a method
> myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, result) {
      ...
  });

// or sending and using a promise
> myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
  .then(function(receipt) {
    // receipt can also be a new contract instance, when coming from a "contract.deploy({...}).send()"
  });

// or sending and using the events
> myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
  .on('transactionHash', function(hash) {
      ...
  })
  .on('receipt', function(receipt) {
      ...
  })
  .on('error', console.error);

https://docs-space.klaytn.com/bapp/sdk/caver-js/v1.4.1/api-references/caver.klay.contract

 

caver.klay.Contract - Klaytn Docs

The function signature can be made by 2 different methods. 1. caver.klay.abi.encodeFunctionSignature('funcName(paramType1,paramType2,...)') 2. caver.utils.sha3('funcName(paramType1,paramType2,...)').substr(0, 10)

docs-space.klaytn.com

 

728x90
반응형
Comments