import { getNetworkInfo, Network } from "@injectivelabs/networks";
import {
TxClient,
TxRestApi,
createTransaction,
} from "@injectivelabs/sdk-ts/core/tx";
import {
PrivateKey,
} from "@injectivelabs/sdk-ts/core/accounts";
import {
MsgSendToEth,
} from "@injectivelabs/sdk-ts/core/modules";
import {
ChainRestAuthApi,
} from "@injectivelabs/sdk-ts/client/chain";
import { toChainFormat, getDefaultStdFee } from "@injectivelabs/utils";
/** MsgSendToEth 예시 */
(async () => {
const network = getNetworkInfo(Network.Mainnet); // rpc/lcd 엔드포인트 가져오기
const privateKeyHash =
"f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3";
const privateKey = PrivateKey.fromPrivateKey(privateKeyHash);
const injectiveAddress = privateKey.toBech32();
const ethAddress = privateKey.toHex();
const publicKey = privateKey.toPublicKey().toBase64();
/** 계정 세부 정보 **/
const accountDetails = await new ChainRestAuthApi(network.rest).fetchAccount(
injectiveAddress
);
/** 메시지 준비 */
const amount = {
amount: toChainFormat(0.01).toFixed(),
denom: "inj",
};
const bridgeFee = {
amount: toChainFormat(0.01).toFixed(),
denom: "inj",
};
const msg = MsgSendToEth.fromJSON({
amount,
bridgeFee,
injectiveAddress,
address: ethAddress,
});
/** 트랜잭션 준비 **/
const { signBytes, txRaw } = createTransaction({
message: msg,
pubKey: publicKey,
fee: getDefaultStdFee(),
sequence: parseInt(accountDetails.account.base_account.sequence, 10),
accountNumber: parseInt(
accountDetails.account.base_account.account_number,
10
),
chainId: network.chainId,
});
/** 트랜잭션 서명 */
const signature = await privateKey.sign(Buffer.from(signBytes));
/** 서명 첨부 */
txRaw.signatures = [signature];
/** 트랜잭션 해시 계산 */
console.log(`트랜잭션 해시: ${TxClient.hash(txRaw)}`);
const txService = new TxRestApi(network.rest);
/** 트랜잭션 시뮬레이션 */
const simulationResponse = await txService.simulate(txRaw);
console.log(
`트랜잭션 시뮬레이션 응답: ${JSON.stringify(
simulationResponse.gasInfo
)}`
);
/** 트랜잭션 브로드캐스트 */
const txResponse = await txService.broadcast(txRaw);
if (txResponse.code !== 0) {
console.log(`트랜잭션 실패: ${txResponse.rawLog}`);
} else {
console.log(
`브로드캐스트된 트랜잭션 해시: ${JSON.stringify(txResponse.txhash)}`
);
}
})();