일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 컨트렉트 배포 자동화
- 프록시배포구조
- vue기초
- 머신러닝기초
- 컨트렉트 동일한 함수이름 호출
- 스마트컨트렉트 예약어 함수이름 중복
- rust 기초
- 스마트컨트렉트 함수이름 중복 호출
- Vue.js
- nest.js설명
- 체인의정석
- ethers
- ethers typescript
- 티스토리챌린지
- 러스트 기초 학습
- Vue
- 스마트컨트렉트테스트
- chainlink 설명
- multicall
- ambiguous function description
- 러스트기초
- ethers type
- 오블완
- 러스트 기초
- 스마트컨트렉트프록시
- SBT표준
- ethers websocket
- ethers v6
- git rebase
- 스마트 컨트렉트 함수이름 중복
Archives
- Today
- Total
체인의정석
Klaytn 컨트렉트 백엔드에서 서명하는 방법 본문
728x90
반응형
일단 개발환경으로는 자바스크립트 및 caver.js를 사용하였으며,
공식문서 구글 등등을 살펴봐도 계속해서 에러가 발생하여 깃허브의 코드를 참고 하였다.
https://github.com/klaybank/arbitrager/blob/a2b82b9c6db933fd93968bd89a5a714dcfb02aa9/index.js
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
728x90
반응형
'개발 > backend' 카테고리의 다른 글
typescript로 UUID 만들기 (0) | 2022.07.20 |
---|---|
타입스크립트에서 사용자 정의 타입 만들기 (0) | 2022.07.19 |
ParseInt() 를 사용하여 숫자타입으로 바꾸어서 비교하기 (0) | 2022.05.13 |
컨트렉트 배포/운영용 프로그램 만들기 여러개의 파일 cmd에서 하나로 체크해서 넘기기 - 구현 (inquirer , oclif) (0) | 2022.04.29 |
VS code Ctrl+d 단축키 intelliJ에서는 Ctrl+G (0) | 2022.04.27 |
Comments