TypeScript를 사용하여 멀티시그 지갑과 상호작용하기
소개
TON의 멀티시그 지갑에 대해 모르신다면 여기에서 확인할 수 있습니다.
다음 단계들을 통해 배우게 될 내용:
- 멀티시그 지갑 생성 및 배포하기
- 해당 지갑으로 트랜잭션 생성, 서명, 전송하기
TypeScript 프로젝트를 만들고 ton 라이브러리를 사용할 것이므로 먼저 설치해야 합니다. ton-access도 사용할 예정입니다:
yarn add typescript @types/node ton ton-crypto ton-core buffer @orbs-network/ton-access
yarn tsc --init -t es2022
이 가이드의 전체 코드는 다음에서 확인할 수 있습니다:
멀티시그 지갑 생성 및 배포
소스 파일(예: main.ts
)을 생성합시다. 선호하는 코드 에디터에서 열고 이 가이드를 따라가세요!
먼저 필요한 것들을 모두 임포트해야 합니다
import { Address, beginCell, MessageRelaxed, toNano, TonClient, WalletContractV4, MultisigWallet, MultisigOrder, MultisigOrderBuilder } from "ton";
import { KeyPair, mnemonicToPrivateKey } from 'ton-crypto';
import { getHttpEndpoint } from "@orbs-network/ton-access";
TonClient
인스턴스 생성:
const endpoint = await getHttpEndpoint();
const client = new TonClient({ endpoint });
그런 다음 작업할 keypair가 필요합니다:
let keyPairs: KeyPair[] = [];
let mnemonics[] = [
['orbit', 'feature', ...], //this should be the seed phrase of 24 words
['sing', 'pattern', ...],
['piece', 'deputy', ...],
['toss', 'shadow', ...],
['guard', 'nurse', ...]
];
for (let i = 0; i < mnemonics.length; i++) keyPairs[i] = await mnemonicToPrivateKey(mnemonics[i]);
MultisigWallet
객체를 생성하는 두 가지 방법이 있습니다:
- 기존 주소에서 가져오기
let addr: Address = Address.parse('EQADBXugwmn4YvWsQizHdWGgfCTN_s3qFP0Ae0pzkU-jwzoE');
let mw: MultisigWallet = await MultisigWallet.fromAddress(addr, { client });
- 새로 생성하기
let mw: MultisigWallet = new MultisigWallet([keyPairs[0].publicKey, keyPairs[1].publicKey], 0, 0, 1, { client });
배포하는 두 가지 방법도 있습니다
- 내부 메시지를 통해
let wallet: WalletContractV4 = WalletContractV4.create({ workchain: 0, publicKey: keyPairs[4].publicKey });
//wallet should be active and have some balance
await mw.deployInternal(wallet.sender(client.provider(wallet.address, null), keyPairs[4].secretKey), toNano('0.05'));