@ton/ton
Version:
[](https://www.npmjs.com/package/ton)
190 lines (189 loc) • 7.57 kB
JavaScript
;
/**
* Copyright (c) Whales Corp.
* All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createWalletTransferV1 = createWalletTransferV1;
exports.createWalletTransferV2 = createWalletTransferV2;
exports.createWalletTransferV3 = createWalletTransferV3;
exports.createWalletTransferV4 = createWalletTransferV4;
exports.createWalletTransferV5Beta = createWalletTransferV5Beta;
exports.createWalletTransferV5R1 = createWalletTransferV5R1;
const core_1 = require("@ton/core");
const crypto_1 = require("@ton/crypto");
const WalletContractV5Beta_1 = require("../v5beta/WalletContractV5Beta");
const WalletV5BetaActions_1 = require("../v5beta/WalletV5BetaActions");
const singer_1 = require("./singer");
const WalletContractV5R1_1 = require("../v5r1/WalletContractV5R1");
const WalletV5R1Actions_1 = require("../v5r1/WalletV5R1Actions");
function packSignatureToFront(signature, signingMessage) {
const body = (0, core_1.beginCell)()
.storeBuffer(signature)
.storeBuilder(signingMessage)
.endCell();
return body;
}
function packSignatureToTail(signature, signingMessage) {
const body = (0, core_1.beginCell)()
.storeBuilder(signingMessage)
.storeBuffer(signature)
.endCell();
return body;
}
function createWalletTransferV1(args) {
// Create message
let signingMessage = (0, core_1.beginCell)()
.storeUint(args.seqno, 32);
if (args.message) {
signingMessage.storeUint(args.sendMode, 8);
signingMessage.storeRef((0, core_1.beginCell)().store((0, core_1.storeMessageRelaxed)(args.message)));
}
// Sign message
let signature = (0, crypto_1.sign)(signingMessage.endCell().hash(), args.secretKey);
// Body
const body = (0, core_1.beginCell)()
.storeBuffer(signature)
.storeBuilder(signingMessage)
.endCell();
return body;
}
function createWalletTransferV2(args) {
// Check number of messages
if (args.messages.length > 4) {
throw Error("Maximum number of messages in a single transfer is 4");
}
// Create message
let signingMessage = (0, core_1.beginCell)()
.storeUint(args.seqno, 32);
if (args.seqno === 0) {
for (let i = 0; i < 32; i++) {
signingMessage.storeBit(1);
}
}
else {
signingMessage.storeUint(args.timeout || Math.floor(Date.now() / 1e3) + 60, 32); // Default timeout: 60 seconds
}
for (let m of args.messages) {
signingMessage.storeUint(args.sendMode, 8);
signingMessage.storeRef((0, core_1.beginCell)().store((0, core_1.storeMessageRelaxed)(m)));
}
// Sign message
let signature = (0, crypto_1.sign)(signingMessage.endCell().hash(), args.secretKey);
// Body
const body = (0, core_1.beginCell)()
.storeBuffer(signature)
.storeBuilder(signingMessage)
.endCell();
return body;
}
function createWalletTransferV3(args) {
// Check number of messages
if (args.messages.length > 4) {
throw Error("Maximum number of messages in a single transfer is 4");
}
// Create message to sign
let signingMessage = (0, core_1.beginCell)()
.storeUint(args.walletId, 32);
if (args.seqno === 0) {
for (let i = 0; i < 32; i++) {
signingMessage.storeBit(1);
}
}
else {
signingMessage.storeUint(args.timeout || Math.floor(Date.now() / 1e3) + 60, 32); // Default timeout: 60 seconds
}
signingMessage.storeUint(args.seqno, 32);
for (let m of args.messages) {
signingMessage.storeUint(args.sendMode, 8);
signingMessage.storeRef((0, core_1.beginCell)().store((0, core_1.storeMessageRelaxed)(m)));
}
return (0, singer_1.signPayload)(args, signingMessage, packSignatureToFront);
}
function createWalletTransferV4(args) {
// Check number of messages
if (args.messages.length > 4) {
throw Error("Maximum number of messages in a single transfer is 4");
}
let signingMessage = (0, core_1.beginCell)()
.storeUint(args.walletId, 32);
if (args.seqno === 0) {
for (let i = 0; i < 32; i++) {
signingMessage.storeBit(1);
}
}
else {
signingMessage.storeUint(args.timeout || Math.floor(Date.now() / 1e3) + 60, 32); // Default timeout: 60 seconds
}
signingMessage.storeUint(args.seqno, 32);
signingMessage.storeUint(0, 8); // Simple order
for (let m of args.messages) {
signingMessage.storeUint(args.sendMode, 8);
signingMessage.storeRef((0, core_1.beginCell)().store((0, core_1.storeMessageRelaxed)(m)));
}
return (0, singer_1.signPayload)(args, signingMessage, packSignatureToFront);
}
function createWalletTransferV5Beta(args) {
// Check number of actions
if (args.actions.length > 255) {
throw Error("Maximum number of OutActions in a single request is 255");
}
if (args.authType === 'extension') {
return (0, core_1.beginCell)()
.storeUint(WalletContractV5Beta_1.WalletContractV5Beta.OpCodes.auth_extension, 32)
.store((0, WalletV5BetaActions_1.storeOutListExtendedV5Beta)(args.actions))
.endCell();
}
const signingMessage = (0, core_1.beginCell)()
.storeUint(args.authType === 'internal'
? WalletContractV5Beta_1.WalletContractV5Beta.OpCodes.auth_signed_internal
: WalletContractV5Beta_1.WalletContractV5Beta.OpCodes.auth_signed_external, 32)
.store(args.walletId);
if (args.seqno === 0) {
for (let i = 0; i < 32; i++) {
signingMessage.storeBit(1);
}
}
else {
signingMessage.storeUint(args.timeout || Math.floor(Date.now() / 1e3) + 60, 32); // Default timeout: 60 seconds
}
signingMessage
.storeUint(args.seqno, 32)
.store((0, WalletV5BetaActions_1.storeOutListExtendedV5Beta)(args.actions));
return (0, singer_1.signPayload)(args, signingMessage, packSignatureToTail);
}
function createWalletTransferV5R1(args) {
// Check number of actions
if (args.actions.length > 255) {
throw Error("Maximum number of OutActions in a single request is 255");
}
args = { ...args };
if (args.authType === 'extension') {
return (0, core_1.beginCell)()
.storeUint(WalletContractV5R1_1.WalletContractV5R1.OpCodes.auth_extension, 32)
.storeUint(args.queryId ?? 0, 64)
.store((0, WalletV5R1Actions_1.storeOutListExtendedV5R1)(args.actions))
.endCell();
}
args.actions = (0, WalletV5R1Actions_1.patchV5R1ActionsSendMode)(args.actions, args.authType);
const signingMessage = (0, core_1.beginCell)()
.storeUint(args.authType === 'internal'
? WalletContractV5R1_1.WalletContractV5R1.OpCodes.auth_signed_internal
: WalletContractV5R1_1.WalletContractV5R1.OpCodes.auth_signed_external, 32)
.store(args.walletId);
if (args.seqno === 0) {
for (let i = 0; i < 32; i++) {
signingMessage.storeBit(1);
}
}
else {
signingMessage.storeUint(args.timeout || Math.floor(Date.now() / 1e3) + 60, 32); // Default timeout: 60 seconds
}
signingMessage
.storeUint(args.seqno, 32)
.store((0, WalletV5R1Actions_1.storeOutListExtendedV5R1)(args.actions));
return (0, singer_1.signPayload)(args, signingMessage, packSignatureToTail);
}