You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
850 lines
36 KiB
850 lines
36 KiB
import { Cell, Slice, StackItem, Address, Builder, InternalMessage, CommonMessageInfo, CellMessage, beginCell, serializeDict, TupleSlice4, readString, stringToCell } from 'ton'; |
|
import { ContractExecutor, createExecutorFromCode, ExecuteError } from 'ton-nodejs'; |
|
import BN from 'bn.js'; |
|
|
|
export type StateInit = { |
|
$$type: 'StateInit'; |
|
code: Cell; |
|
data: Cell; |
|
} |
|
|
|
export function packStateInit(src: StateInit): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeRef(src.code); |
|
b_0 = b_0.storeRef(src.data); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackStateInit(src: StateInit, __stack: StackItem[]) { |
|
__stack.push({ type: 'cell', cell: src.code }); |
|
__stack.push({ type: 'cell', cell: src.data }); |
|
} |
|
|
|
export function packTupleStateInit(src: StateInit): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'cell', cell: src.code }); |
|
__stack.push({ type: 'cell', cell: src.data }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackStateInit(slice: TupleSlice4): StateInit { |
|
const code = slice.readCell(); |
|
const data = slice.readCell(); |
|
return { $$type: 'StateInit', code: code, data: data }; |
|
} |
|
export function unpackTupleStateInit(slice: TupleSlice4): StateInit { |
|
const code = slice.readCell(); |
|
const data = slice.readCell(); |
|
return { $$type: 'StateInit', code: code, data: data }; |
|
} |
|
export type Context = { |
|
$$type: 'Context'; |
|
bounced: boolean; |
|
sender: Address; |
|
value: BN; |
|
raw: Cell; |
|
} |
|
|
|
export function packContext(src: Context): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeBit(src.bounced); |
|
b_0 = b_0.storeAddress(src.sender); |
|
b_0 = b_0.storeInt(src.value, 257); |
|
b_0 = b_0.storeRef(src.raw); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackContext(src: Context, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.bounced ? new BN(-1) : new BN(0) }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.sender).endCell() }); |
|
__stack.push({ type: 'int', value: src.value }); |
|
__stack.push({ type: 'slice', cell: src.raw }); |
|
} |
|
|
|
export function packTupleContext(src: Context): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.bounced ? new BN(-1) : new BN(0) }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.sender).endCell() }); |
|
__stack.push({ type: 'int', value: src.value }); |
|
__stack.push({ type: 'slice', cell: src.raw }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackContext(slice: TupleSlice4): Context { |
|
const bounced = slice.readBoolean(); |
|
const sender = slice.readAddress(); |
|
const value = slice.readBigNumber(); |
|
const raw = slice.readCell(); |
|
return { $$type: 'Context', bounced: bounced, sender: sender, value: value, raw: raw }; |
|
} |
|
export function unpackTupleContext(slice: TupleSlice4): Context { |
|
const bounced = slice.readBoolean(); |
|
const sender = slice.readAddress(); |
|
const value = slice.readBigNumber(); |
|
const raw = slice.readCell(); |
|
return { $$type: 'Context', bounced: bounced, sender: sender, value: value, raw: raw }; |
|
} |
|
export type SendParameters = { |
|
$$type: 'SendParameters'; |
|
bounce: boolean; |
|
to: Address; |
|
value: BN; |
|
mode: BN; |
|
body: Cell | null; |
|
code: Cell | null; |
|
data: Cell | null; |
|
} |
|
|
|
export function packSendParameters(src: SendParameters): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeBit(src.bounce); |
|
b_0 = b_0.storeAddress(src.to); |
|
b_0 = b_0.storeInt(src.value, 257); |
|
b_0 = b_0.storeInt(src.mode, 257); |
|
if (src.body !== null) { |
|
b_0 = b_0.storeBit(true); |
|
b_0 = b_0.storeRef(src.body); |
|
} else { |
|
b_0 = b_0.storeBit(false); |
|
} |
|
if (src.code !== null) { |
|
b_0 = b_0.storeBit(true); |
|
b_0 = b_0.storeRef(src.code); |
|
} else { |
|
b_0 = b_0.storeBit(false); |
|
} |
|
if (src.data !== null) { |
|
b_0 = b_0.storeBit(true); |
|
b_0 = b_0.storeRef(src.data); |
|
} else { |
|
b_0 = b_0.storeBit(false); |
|
} |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackSendParameters(src: SendParameters, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.bounce ? new BN(-1) : new BN(0) }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.to).endCell() }); |
|
__stack.push({ type: 'int', value: src.value }); |
|
__stack.push({ type: 'int', value: src.mode }); |
|
if (src.body !== null) { |
|
__stack.push({ type: 'cell', cell: src.body }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
if (src.code !== null) { |
|
__stack.push({ type: 'cell', cell: src.code }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
if (src.data !== null) { |
|
__stack.push({ type: 'cell', cell: src.data }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
} |
|
|
|
export function packTupleSendParameters(src: SendParameters): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.bounce ? new BN(-1) : new BN(0) }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.to).endCell() }); |
|
__stack.push({ type: 'int', value: src.value }); |
|
__stack.push({ type: 'int', value: src.mode }); |
|
if (src.body !== null) { |
|
__stack.push({ type: 'cell', cell: src.body }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
if (src.code !== null) { |
|
__stack.push({ type: 'cell', cell: src.code }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
if (src.data !== null) { |
|
__stack.push({ type: 'cell', cell: src.data }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
return __stack; |
|
} |
|
|
|
export function unpackStackSendParameters(slice: TupleSlice4): SendParameters { |
|
const bounce = slice.readBoolean(); |
|
const to = slice.readAddress(); |
|
const value = slice.readBigNumber(); |
|
const mode = slice.readBigNumber(); |
|
const body = slice.readCellOpt(); |
|
const code = slice.readCellOpt(); |
|
const data = slice.readCellOpt(); |
|
return { $$type: 'SendParameters', bounce: bounce, to: to, value: value, mode: mode, body: body, code: code, data: data }; |
|
} |
|
export function unpackTupleSendParameters(slice: TupleSlice4): SendParameters { |
|
const bounce = slice.readBoolean(); |
|
const to = slice.readAddress(); |
|
const value = slice.readBigNumber(); |
|
const mode = slice.readBigNumber(); |
|
const body = slice.readCellOpt(); |
|
const code = slice.readCellOpt(); |
|
const data = slice.readCellOpt(); |
|
return { $$type: 'SendParameters', bounce: bounce, to: to, value: value, mode: mode, body: body, code: code, data: data }; |
|
} |
|
export type ChangeOwner = { |
|
$$type: 'ChangeOwner'; |
|
newOwner: Address; |
|
} |
|
|
|
export function packChangeOwner(src: ChangeOwner): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(3067051791, 32); |
|
b_0 = b_0.storeAddress(src.newOwner); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackChangeOwner(src: ChangeOwner, __stack: StackItem[]) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.newOwner).endCell() }); |
|
} |
|
|
|
export function packTupleChangeOwner(src: ChangeOwner): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.newOwner).endCell() }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackChangeOwner(slice: TupleSlice4): ChangeOwner { |
|
const newOwner = slice.readAddress(); |
|
return { $$type: 'ChangeOwner', newOwner: newOwner }; |
|
} |
|
export function unpackTupleChangeOwner(slice: TupleSlice4): ChangeOwner { |
|
const newOwner = slice.readAddress(); |
|
return { $$type: 'ChangeOwner', newOwner: newOwner }; |
|
} |
|
export type TokenTransfer = { |
|
$$type: 'TokenTransfer'; |
|
queryId: BN; |
|
amount: BN; |
|
destination: Address; |
|
responseDestination: Address | null; |
|
customPayload: Cell | null; |
|
forwardTonAmount: BN; |
|
forwardPayload: Cell; |
|
} |
|
|
|
export function packTokenTransfer(src: TokenTransfer): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(260734629, 32); |
|
b_0 = b_0.storeUint(src.queryId, 64); |
|
b_0 = b_0.storeCoins(src.amount); |
|
b_0 = b_0.storeAddress(src.destination); |
|
b_0 = b_0.storeAddress(src.responseDestination); |
|
if (src.customPayload !== null) { |
|
b_0 = b_0.storeBit(true); |
|
b_0 = b_0.storeRef(src.customPayload); |
|
} else { |
|
b_0 = b_0.storeBit(false); |
|
} |
|
b_0 = b_0.storeCoins(src.forwardTonAmount); |
|
b_0 = b_0.storeCellCopy(src.forwardPayload); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackTokenTransfer(src: TokenTransfer, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.destination).endCell() }); |
|
if (src.responseDestination !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseDestination).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
if (src.customPayload !== null) { |
|
__stack.push({ type: 'cell', cell: src.customPayload }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
__stack.push({ type: 'int', value: src.forwardTonAmount }); |
|
__stack.push({ type: 'slice', cell: src.forwardPayload }); |
|
} |
|
|
|
export function packTupleTokenTransfer(src: TokenTransfer): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.destination).endCell() }); |
|
if (src.responseDestination !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseDestination).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
if (src.customPayload !== null) { |
|
__stack.push({ type: 'cell', cell: src.customPayload }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
__stack.push({ type: 'int', value: src.forwardTonAmount }); |
|
__stack.push({ type: 'slice', cell: src.forwardPayload }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackTokenTransfer(slice: TupleSlice4): TokenTransfer { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const destination = slice.readAddress(); |
|
const responseDestination = slice.readAddressOpt(); |
|
const customPayload = slice.readCellOpt(); |
|
const forwardTonAmount = slice.readBigNumber(); |
|
const forwardPayload = slice.readCell(); |
|
return { $$type: 'TokenTransfer', queryId: queryId, amount: amount, destination: destination, responseDestination: responseDestination, customPayload: customPayload, forwardTonAmount: forwardTonAmount, forwardPayload: forwardPayload }; |
|
} |
|
export function unpackTupleTokenTransfer(slice: TupleSlice4): TokenTransfer { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const destination = slice.readAddress(); |
|
const responseDestination = slice.readAddressOpt(); |
|
const customPayload = slice.readCellOpt(); |
|
const forwardTonAmount = slice.readBigNumber(); |
|
const forwardPayload = slice.readCell(); |
|
return { $$type: 'TokenTransfer', queryId: queryId, amount: amount, destination: destination, responseDestination: responseDestination, customPayload: customPayload, forwardTonAmount: forwardTonAmount, forwardPayload: forwardPayload }; |
|
} |
|
export type TokenTransferInternal = { |
|
$$type: 'TokenTransferInternal'; |
|
queryId: BN; |
|
amount: BN; |
|
from: Address; |
|
responseAddress: Address | null; |
|
forwardTonAmount: BN; |
|
forwardPayload: Cell; |
|
} |
|
|
|
export function packTokenTransferInternal(src: TokenTransferInternal): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(395134233, 32); |
|
b_0 = b_0.storeUint(src.queryId, 64); |
|
b_0 = b_0.storeCoins(src.amount); |
|
b_0 = b_0.storeAddress(src.from); |
|
b_0 = b_0.storeAddress(src.responseAddress); |
|
b_0 = b_0.storeCoins(src.forwardTonAmount); |
|
b_0 = b_0.storeCellCopy(src.forwardPayload); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackTokenTransferInternal(src: TokenTransferInternal, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.from).endCell() }); |
|
if (src.responseAddress !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseAddress).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
__stack.push({ type: 'int', value: src.forwardTonAmount }); |
|
__stack.push({ type: 'slice', cell: src.forwardPayload }); |
|
} |
|
|
|
export function packTupleTokenTransferInternal(src: TokenTransferInternal): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.from).endCell() }); |
|
if (src.responseAddress !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseAddress).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
__stack.push({ type: 'int', value: src.forwardTonAmount }); |
|
__stack.push({ type: 'slice', cell: src.forwardPayload }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackTokenTransferInternal(slice: TupleSlice4): TokenTransferInternal { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const from = slice.readAddress(); |
|
const responseAddress = slice.readAddressOpt(); |
|
const forwardTonAmount = slice.readBigNumber(); |
|
const forwardPayload = slice.readCell(); |
|
return { $$type: 'TokenTransferInternal', queryId: queryId, amount: amount, from: from, responseAddress: responseAddress, forwardTonAmount: forwardTonAmount, forwardPayload: forwardPayload }; |
|
} |
|
export function unpackTupleTokenTransferInternal(slice: TupleSlice4): TokenTransferInternal { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const from = slice.readAddress(); |
|
const responseAddress = slice.readAddressOpt(); |
|
const forwardTonAmount = slice.readBigNumber(); |
|
const forwardPayload = slice.readCell(); |
|
return { $$type: 'TokenTransferInternal', queryId: queryId, amount: amount, from: from, responseAddress: responseAddress, forwardTonAmount: forwardTonAmount, forwardPayload: forwardPayload }; |
|
} |
|
export type TokenNotification = { |
|
$$type: 'TokenNotification'; |
|
queryId: BN; |
|
amount: BN; |
|
from: Address; |
|
forwardPayload: Cell; |
|
} |
|
|
|
export function packTokenNotification(src: TokenNotification): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(1935855772, 32); |
|
b_0 = b_0.storeUint(src.queryId, 64); |
|
b_0 = b_0.storeCoins(src.amount); |
|
b_0 = b_0.storeAddress(src.from); |
|
b_0 = b_0.storeCellCopy(src.forwardPayload); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackTokenNotification(src: TokenNotification, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.from).endCell() }); |
|
__stack.push({ type: 'slice', cell: src.forwardPayload }); |
|
} |
|
|
|
export function packTupleTokenNotification(src: TokenNotification): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.from).endCell() }); |
|
__stack.push({ type: 'slice', cell: src.forwardPayload }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackTokenNotification(slice: TupleSlice4): TokenNotification { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const from = slice.readAddress(); |
|
const forwardPayload = slice.readCell(); |
|
return { $$type: 'TokenNotification', queryId: queryId, amount: amount, from: from, forwardPayload: forwardPayload }; |
|
} |
|
export function unpackTupleTokenNotification(slice: TupleSlice4): TokenNotification { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const from = slice.readAddress(); |
|
const forwardPayload = slice.readCell(); |
|
return { $$type: 'TokenNotification', queryId: queryId, amount: amount, from: from, forwardPayload: forwardPayload }; |
|
} |
|
export type TokenBurn = { |
|
$$type: 'TokenBurn'; |
|
queryId: BN; |
|
amount: BN; |
|
owner: Address; |
|
responseAddress: Address | null; |
|
} |
|
|
|
export function packTokenBurn(src: TokenBurn): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(1499400124, 32); |
|
b_0 = b_0.storeUint(src.queryId, 64); |
|
b_0 = b_0.storeCoins(src.amount); |
|
b_0 = b_0.storeAddress(src.owner); |
|
b_0 = b_0.storeAddress(src.responseAddress); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackTokenBurn(src: TokenBurn, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
if (src.responseAddress !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseAddress).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
} |
|
|
|
export function packTupleTokenBurn(src: TokenBurn): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
if (src.responseAddress !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseAddress).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
return __stack; |
|
} |
|
|
|
export function unpackStackTokenBurn(slice: TupleSlice4): TokenBurn { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const owner = slice.readAddress(); |
|
const responseAddress = slice.readAddressOpt(); |
|
return { $$type: 'TokenBurn', queryId: queryId, amount: amount, owner: owner, responseAddress: responseAddress }; |
|
} |
|
export function unpackTupleTokenBurn(slice: TupleSlice4): TokenBurn { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const owner = slice.readAddress(); |
|
const responseAddress = slice.readAddressOpt(); |
|
return { $$type: 'TokenBurn', queryId: queryId, amount: amount, owner: owner, responseAddress: responseAddress }; |
|
} |
|
export type TokenBurnNotification = { |
|
$$type: 'TokenBurnNotification'; |
|
queryId: BN; |
|
amount: BN; |
|
owner: Address; |
|
responseAddress: Address | null; |
|
} |
|
|
|
export function packTokenBurnNotification(src: TokenBurnNotification): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(2078119902, 32); |
|
b_0 = b_0.storeUint(src.queryId, 64); |
|
b_0 = b_0.storeCoins(src.amount); |
|
b_0 = b_0.storeAddress(src.owner); |
|
b_0 = b_0.storeAddress(src.responseAddress); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackTokenBurnNotification(src: TokenBurnNotification, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
if (src.responseAddress !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseAddress).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
} |
|
|
|
export function packTupleTokenBurnNotification(src: TokenBurnNotification): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
__stack.push({ type: 'int', value: src.amount }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
if (src.responseAddress !== null) { |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.responseAddress).endCell() }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
return __stack; |
|
} |
|
|
|
export function unpackStackTokenBurnNotification(slice: TupleSlice4): TokenBurnNotification { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const owner = slice.readAddress(); |
|
const responseAddress = slice.readAddressOpt(); |
|
return { $$type: 'TokenBurnNotification', queryId: queryId, amount: amount, owner: owner, responseAddress: responseAddress }; |
|
} |
|
export function unpackTupleTokenBurnNotification(slice: TupleSlice4): TokenBurnNotification { |
|
const queryId = slice.readBigNumber(); |
|
const amount = slice.readBigNumber(); |
|
const owner = slice.readAddress(); |
|
const responseAddress = slice.readAddressOpt(); |
|
return { $$type: 'TokenBurnNotification', queryId: queryId, amount: amount, owner: owner, responseAddress: responseAddress }; |
|
} |
|
export type TokenExcesses = { |
|
$$type: 'TokenExcesses'; |
|
queryId: BN; |
|
} |
|
|
|
export function packTokenExcesses(src: TokenExcesses): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(3576854235, 32); |
|
b_0 = b_0.storeUint(src.queryId, 64); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackTokenExcesses(src: TokenExcesses, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
} |
|
|
|
export function packTupleTokenExcesses(src: TokenExcesses): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.queryId }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackTokenExcesses(slice: TupleSlice4): TokenExcesses { |
|
const queryId = slice.readBigNumber(); |
|
return { $$type: 'TokenExcesses', queryId: queryId }; |
|
} |
|
export function unpackTupleTokenExcesses(slice: TupleSlice4): TokenExcesses { |
|
const queryId = slice.readBigNumber(); |
|
return { $$type: 'TokenExcesses', queryId: queryId }; |
|
} |
|
export type TokenUpdateContent = { |
|
$$type: 'TokenUpdateContent'; |
|
content: Cell | null; |
|
} |
|
|
|
export function packTokenUpdateContent(src: TokenUpdateContent): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(1862840892, 32); |
|
if (src.content !== null) { |
|
b_0 = b_0.storeBit(true); |
|
b_0 = b_0.storeRef(src.content); |
|
} else { |
|
b_0 = b_0.storeBit(false); |
|
} |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackTokenUpdateContent(src: TokenUpdateContent, __stack: StackItem[]) { |
|
if (src.content !== null) { |
|
__stack.push({ type: 'cell', cell: src.content }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
} |
|
|
|
export function packTupleTokenUpdateContent(src: TokenUpdateContent): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
if (src.content !== null) { |
|
__stack.push({ type: 'cell', cell: src.content }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
return __stack; |
|
} |
|
|
|
export function unpackStackTokenUpdateContent(slice: TupleSlice4): TokenUpdateContent { |
|
const content = slice.readCellOpt(); |
|
return { $$type: 'TokenUpdateContent', content: content }; |
|
} |
|
export function unpackTupleTokenUpdateContent(slice: TupleSlice4): TokenUpdateContent { |
|
const content = slice.readCellOpt(); |
|
return { $$type: 'TokenUpdateContent', content: content }; |
|
} |
|
export type JettonData = { |
|
$$type: 'JettonData'; |
|
totalSupply: BN; |
|
mintable: boolean; |
|
owner: Address; |
|
content: Cell | null; |
|
walletCode: Cell; |
|
} |
|
|
|
export function packJettonData(src: JettonData): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeInt(src.totalSupply, 257); |
|
b_0 = b_0.storeBit(src.mintable); |
|
b_0 = b_0.storeAddress(src.owner); |
|
if (src.content !== null) { |
|
b_0 = b_0.storeBit(true); |
|
b_0 = b_0.storeRef(src.content); |
|
} else { |
|
b_0 = b_0.storeBit(false); |
|
} |
|
b_0 = b_0.storeRef(src.walletCode); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackJettonData(src: JettonData, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.totalSupply }); |
|
__stack.push({ type: 'int', value: src.mintable ? new BN(-1) : new BN(0) }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
if (src.content !== null) { |
|
__stack.push({ type: 'cell', cell: src.content }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
__stack.push({ type: 'cell', cell: src.walletCode }); |
|
} |
|
|
|
export function packTupleJettonData(src: JettonData): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.totalSupply }); |
|
__stack.push({ type: 'int', value: src.mintable ? new BN(-1) : new BN(0) }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
if (src.content !== null) { |
|
__stack.push({ type: 'cell', cell: src.content }); |
|
} else { |
|
__stack.push({ type: 'null' }); |
|
} |
|
__stack.push({ type: 'cell', cell: src.walletCode }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackJettonData(slice: TupleSlice4): JettonData { |
|
const totalSupply = slice.readBigNumber(); |
|
const mintable = slice.readBoolean(); |
|
const owner = slice.readAddress(); |
|
const content = slice.readCellOpt(); |
|
const walletCode = slice.readCell(); |
|
return { $$type: 'JettonData', totalSupply: totalSupply, mintable: mintable, owner: owner, content: content, walletCode: walletCode }; |
|
} |
|
export function unpackTupleJettonData(slice: TupleSlice4): JettonData { |
|
const totalSupply = slice.readBigNumber(); |
|
const mintable = slice.readBoolean(); |
|
const owner = slice.readAddress(); |
|
const content = slice.readCellOpt(); |
|
const walletCode = slice.readCell(); |
|
return { $$type: 'JettonData', totalSupply: totalSupply, mintable: mintable, owner: owner, content: content, walletCode: walletCode }; |
|
} |
|
export type JettonWalletData = { |
|
$$type: 'JettonWalletData'; |
|
balance: BN; |
|
owner: Address; |
|
master: Address; |
|
walletCode: Cell; |
|
} |
|
|
|
export function packJettonWalletData(src: JettonWalletData): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeInt(src.balance, 257); |
|
b_0 = b_0.storeAddress(src.owner); |
|
b_0 = b_0.storeAddress(src.master); |
|
b_0 = b_0.storeRef(src.walletCode); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackJettonWalletData(src: JettonWalletData, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.balance }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.master).endCell() }); |
|
__stack.push({ type: 'cell', cell: src.walletCode }); |
|
} |
|
|
|
export function packTupleJettonWalletData(src: JettonWalletData): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.balance }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.owner).endCell() }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(src.master).endCell() }); |
|
__stack.push({ type: 'cell', cell: src.walletCode }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackJettonWalletData(slice: TupleSlice4): JettonWalletData { |
|
const balance = slice.readBigNumber(); |
|
const owner = slice.readAddress(); |
|
const master = slice.readAddress(); |
|
const walletCode = slice.readCell(); |
|
return { $$type: 'JettonWalletData', balance: balance, owner: owner, master: master, walletCode: walletCode }; |
|
} |
|
export function unpackTupleJettonWalletData(slice: TupleSlice4): JettonWalletData { |
|
const balance = slice.readBigNumber(); |
|
const owner = slice.readAddress(); |
|
const master = slice.readAddress(); |
|
const walletCode = slice.readCell(); |
|
return { $$type: 'JettonWalletData', balance: balance, owner: owner, master: master, walletCode: walletCode }; |
|
} |
|
export type Mint = { |
|
$$type: 'Mint'; |
|
amount: BN; |
|
} |
|
|
|
export function packMint(src: Mint): Cell { |
|
let b_0 = new Builder(); |
|
b_0 = b_0.storeUint(2737462367, 32); |
|
b_0 = b_0.storeInt(src.amount, 257); |
|
return b_0.endCell(); |
|
} |
|
|
|
export function packStackMint(src: Mint, __stack: StackItem[]) { |
|
__stack.push({ type: 'int', value: src.amount }); |
|
} |
|
|
|
export function packTupleMint(src: Mint): StackItem[] { |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'int', value: src.amount }); |
|
return __stack; |
|
} |
|
|
|
export function unpackStackMint(slice: TupleSlice4): Mint { |
|
const amount = slice.readBigNumber(); |
|
return { $$type: 'Mint', amount: amount }; |
|
} |
|
export function unpackTupleMint(slice: TupleSlice4): Mint { |
|
const amount = slice.readBigNumber(); |
|
return { $$type: 'Mint', amount: amount }; |
|
} |
|
export async function JettonDefaultWallet_init(master: Address, owner: Address) { |
|
const __code = 'te6ccgECKQEABYcAART/APSkE/S88sgLAQIBYgIDAgLKBAUCASAlJgIBIAYHAgFIEhMCASAICQIB7hARAgFICgsAR7OQ4AOWAuYDlgLgA5YAJZmZk/IBkOQDlgLgA5YAJZQPl/+ToQT1RwIddJwh+VMCDXCx/eAtDTAwFxsMABkX+RcOIB+kAiUGZvBPhhAo4zMO1E0NQB+GKBAQHXAPpAAQH6QAFDMGwTVQLwKMj4QgHMVSBQI4EBAc8AAc8WAc8Wye1U4CCCEA+KfqW64wIgghAXjUUZuuMCghBZXwe8uuMCMIDA0ODwALQgbvLQgIAN4w7UTQ1AH4YoEBAdcA+kABAfpAAUMwbBMD0x8BghAPin6luvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeJtAtIAAZRsEtQS3voAUWYWFURANxCJEHhVBfAlyPhCAcxVIFAjgQEBzwABzxYBzxbJ7VQAyjDtRNDUAfhigQEB1wD6QAEB+kABQzBsEwPTHwGCEBeNRRm68uCB0z/6APpAAQH6QCHXCwHDAJEBkjFt4gH6AFFVFRRDMDYQeBBnVQTwJsj4QgHMVSBQI4EBAc8AAc8WAc8Wye1UALztRNDUAfhigQEB1wD6QAEB+kABQzBsEwPTHwGCEFlfB7y68uCB0z/6APpAAQH6QCHXCwHDAJEBkjFt4hRDMDQQVhBFVQLwJ8j4QgHMVSBQI4EBAc8AAc8WAc8Wye1UAAbywIIAFSUfwHKAOBwAcoAgAAkcFnwCYAIBIBQVAE/cAQa5Dpj+mfmP0AGECaqRFBCAvGoozdAcEIPe7L710J2Il5egnQAUAgEgFhcCASAdHgIBIBgZAgEgGxwB9zIcQHKAVAH8B5wAcoCUAXPFlAD+gJwAcpoI26zJW6zsY49f/AeyHDwHnDwHiRus5l/8B4E8AJQBMyVNANw8B7iJG6zmX/wHgTwAlAEzJU0A3DwHuJw8B4Cf/AeAslYzJYzMwFw8B7iIW6zmH/wHgHwAgHMlDFw8B7iyQGAaACUbDH6ADFx1yH6ADH6ADCnA6sAgAAT7AAApHADyMxDE1AjgQEBzwABzxYBzxbJgAG8AtD0BDAgggDYrwGAEPQPb6Hy4GRtAoIA2K8BgBD0D2+h8uBkEoIA2K8BAoAQ9BfI9ADJQAPwIoAIBIB8gAgEgIiMADz4QlMS8CMwgAacbCL4QW8kgRFNUzvHBfL0UbehggD1/CHC//L0QzBSPPAhcSTCAJIwct6BPrsCqIIJMS0AoIIImJaAoBK88vT4QlQgZPAjXPAff1B2cIBAK1RMORiAhAGTIVVCCEBeNRRlQB8sfFcs/UAP6AgHPFgEgbpUwcAHLAZLPFuIB+gIBzxbJEFYQNFnwIAHvPhBbyRTKscFs44S+EJTuPAjAYERTQLwHyTHBfL03lHIoIIA9fwhwv/y9CH4J28QIaGCCJiWgGa2CKGCCJiWgKChJsIAlhB9UIlfCOMNJW6zIsIAsI4dcAbwAnAEyAGCENUydttYyx/LP8kQR0MwF21t8CCSNVvigJADTFv4QW8kgRFNUzjHBfL0UYShggD1/CHC//L0QzBSOfAhgT67AYIJMS0AoIIImJaAoBK88vR/cAOAQFQzZshVMIIQe92X3lAFyx8Tyz8B+gIBzxYBIG6VMHABywGSzxbiyVQTBFAzbW3wIIAByUE1DMPAhUjCgGqFwcChIE1B0yFUwghBzYtCcUAXLHxPLPwH6AgHPFgHPFskoEEZDE1BVbW3wIFAFADe/2BdqJoagD8MUCAgOuAfSAAgP0gAKGYNgn4EkAgJzJygACazx+BFAAHGt6ME4LnYerpZXPY9CdhzrJUKNs0E4TusalpWyPlmRadeW/vixHME4TujwAfLZsB5P5B1ZLNZRCcA='; |
|
const depends = new Map<string, Cell>(); |
|
depends.set('55471', Cell.fromBoc(Buffer.from('te6ccgECKQEABYcAART/APSkE/S88sgLAQIBYgIDAgLKBAUCASAlJgIBIAYHAgFIEhMCASAICQIB7hARAgFICgsAR7OQ4AOWAuYDlgLgA5YAJZmZk/IBkOQDlgLgA5YAJZQPl/+ToQT1RwIddJwh+VMCDXCx/eAtDTAwFxsMABkX+RcOIB+kAiUGZvBPhhAo4zMO1E0NQB+GKBAQHXAPpAAQH6QAFDMGwTVQLwKMj4QgHMVSBQI4EBAc8AAc8WAc8Wye1U4CCCEA+KfqW64wIgghAXjUUZuuMCghBZXwe8uuMCMIDA0ODwALQgbvLQgIAN4w7UTQ1AH4YoEBAdcA+kABAfpAAUMwbBMD0x8BghAPin6luvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeJtAtIAAZRsEtQS3voAUWYWFURANxCJEHhVBfAlyPhCAcxVIFAjgQEBzwABzxYBzxbJ7VQAyjDtRNDUAfhigQEB1wD6QAEB+kABQzBsEwPTHwGCEBeNRRm68uCB0z/6APpAAQH6QCHXCwHDAJEBkjFt4gH6AFFVFRRDMDYQeBBnVQTwJsj4QgHMVSBQI4EBAc8AAc8WAc8Wye1UALztRNDUAfhigQEB1wD6QAEB+kABQzBsEwPTHwGCEFlfB7y68uCB0z/6APpAAQH6QCHXCwHDAJEBkjFt4hRDMDQQVhBFVQLwJ8j4QgHMVSBQI4EBAc8AAc8WAc8Wye1UAAbywIIAFSUfwHKAOBwAcoAgAAkcFnwCYAIBIBQVAE/cAQa5Dpj+mfmP0AGECaqRFBCAvGoozdAcEIPe7L710J2Il5egnQAUAgEgFhcCASAdHgIBIBgZAgEgGxwB9zIcQHKAVAH8B5wAcoCUAXPFlAD+gJwAcpoI26zJW6zsY49f/AeyHDwHnDwHiRus5l/8B4E8AJQBMyVNANw8B7iJG6zmX/wHgTwAlAEzJU0A3DwHuJw8B4Cf/AeAslYzJYzMwFw8B7iIW6zmH/wHgHwAgHMlDFw8B7iyQGAaACUbDH6ADFx1yH6ADH6ADCnA6sAgAAT7AAApHADyMxDE1AjgQEBzwABzxYBzxbJgAG8AtD0BDAgggDYrwGAEPQPb6Hy4GRtAoIA2K8BgBD0D2+h8uBkEoIA2K8BAoAQ9BfI9ADJQAPwIoAIBIB8gAgEgIiMADz4QlMS8CMwgAacbCL4QW8kgRFNUzvHBfL0UbehggD1/CHC//L0QzBSPPAhcSTCAJIwct6BPrsCqIIJMS0AoIIImJaAoBK88vT4QlQgZPAjXPAff1B2cIBAK1RMORiAhAGTIVVCCEBeNRRlQB8sfFcs/UAP6AgHPFgEgbpUwcAHLAZLPFuIB+gIBzxbJEFYQNFnwIAHvPhBbyRTKscFs44S+EJTuPAjAYERTQLwHyTHBfL03lHIoIIA9fwhwv/y9CH4J28QIaGCCJiWgGa2CKGCCJiWgKChJsIAlhB9UIlfCOMNJW6zIsIAsI4dcAbwAnAEyAGCENUydttYyx/LP8kQR0MwF21t8CCSNVvigJADTFv4QW8kgRFNUzjHBfL0UYShggD1/CHC//L0QzBSOfAhgT67AYIJMS0AoIIImJaAoBK88vR/cAOAQFQzZshVMIIQe92X3lAFyx8Tyz8B+gIBzxYBIG6VMHABywGSzxbiyVQTBFAzbW3wIIAByUE1DMPAhUjCgGqFwcChIE1B0yFUwghBzYtCcUAXLHxPLPwH6AgHPFgHPFskoEEZDE1BVbW3wIFAFADe/2BdqJoagD8MUCAgOuAfSAAgP0gAKGYNgn4EkAgJzJygACazx+BFAAHGt6ME4LnYerpZXPY9CdhzrJUKNs0E4TusalpWyPlmRadeW/vixHME4TujwAfLZsB5P5B1ZLNZRCcA=', 'base64'))[0]); |
|
let systemCell = beginCell().storeDict(serializeDict(depends, 16, (src, v) => v.refs.push(src))).endCell(); |
|
let __stack: StackItem[] = []; |
|
__stack.push({ type: 'cell', cell: systemCell }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(master).endCell() }); |
|
__stack.push({ type: 'slice', cell: beginCell().storeAddress(owner).endCell() }); |
|
let codeCell = Cell.fromBoc(Buffer.from(__code, 'base64'))[0]; |
|
let executor = await createExecutorFromCode({ code: codeCell, data: new Cell() }); |
|
let res = await executor.get('init_JettonDefaultWallet', __stack, { debug: true }); |
|
if (res.debugLogs.length > 0) { console.warn(res.debugLogs); } |
|
let data = res.stack.readCell(); |
|
return { code: codeCell, data }; |
|
} |
|
|
|
export const JettonDefaultWallet_errors: { [key: string]: string } = { |
|
'2': `Stack undeflow`, |
|
'3': `Stack overflow`, |
|
'4': `Integer overflow`, |
|
'5': `Integer out of expected range`, |
|
'6': `Invalid opcode`, |
|
'7': `Type check error`, |
|
'8': `Cell overflow`, |
|
'9': `Cell underflow`, |
|
'10': `Dictionary error`, |
|
'13': `Out of gas error`, |
|
'32': `Method ID not found`, |
|
'34': `Action is invalid or not supported`, |
|
'37': `Not enough TON`, |
|
'38': `Not enough extra-currencies`, |
|
'128': `Null reference exception`, |
|
'129': `Invalid serialization prefix`, |
|
'130': `Invalid incoming message`, |
|
'131': `Constraints error`, |
|
'132': `Access denied`, |
|
'133': `Contract stopped`, |
|
'134': `Invalid argument`, |
|
'4429': `Invalid sender`, |
|
'13650': `Invalid bounced message`, |
|
'16059': `Invalid value`, |
|
'62972': `Invalid balance`, |
|
} |
|
|
|
export class JettonDefaultWallet { |
|
readonly executor: ContractExecutor; |
|
constructor(executor: ContractExecutor) { this.executor = executor; } |
|
|
|
async send(args: { amount: BN, from?: Address, debug?: boolean }, message: TokenTransfer | TokenTransferInternal | TokenBurn) { |
|
let body: Cell | null = null; |
|
if (message && typeof message === 'object' && !(message instanceof Slice) && message.$$type === 'TokenTransfer') { |
|
body = packTokenTransfer(message); |
|
} |
|
if (message && typeof message === 'object' && !(message instanceof Slice) && message.$$type === 'TokenTransferInternal') { |
|
body = packTokenTransferInternal(message); |
|
} |
|
if (message && typeof message === 'object' && !(message instanceof Slice) && message.$$type === 'TokenBurn') { |
|
body = packTokenBurn(message); |
|
} |
|
if (body === null) { throw new Error('Invalid message type'); } |
|
try { |
|
let r = await this.executor.internal(new InternalMessage({ |
|
to: this.executor.address, |
|
from: args.from || this.executor.address, |
|
bounce: false, |
|
value: args.amount, |
|
body: new CommonMessageInfo({ |
|
body: new CellMessage(body!) |
|
}) |
|
}), { debug: args.debug }); |
|
if (r.debugLogs.length > 0) { console.warn(r.debugLogs); } |
|
} catch (e) { |
|
if (e instanceof ExecuteError) { |
|
if (e.debugLogs.length > 0) { console.warn(e.debugLogs); } |
|
if (JettonDefaultWallet_errors[e.exitCode.toString()]) { |
|
throw new Error(JettonDefaultWallet_errors[e.exitCode.toString()]); |
|
} |
|
} |
|
throw e; |
|
} |
|
} |
|
async getGetWalletData() { |
|
try { |
|
let __stack: StackItem[] = []; |
|
let result = await this.executor.get('get_wallet_data', __stack, { debug: true }); |
|
if (result.debugLogs.length > 0) { console.warn(result.debugLogs); } |
|
return unpackStackJettonWalletData(result.stack); |
|
} catch (e) { |
|
if (e instanceof ExecuteError) { |
|
if (e.debugLogs.length > 0) { console.warn(e.debugLogs); } |
|
if (JettonDefaultWallet_errors[e.exitCode.toString()]) { |
|
throw new Error(JettonDefaultWallet_errors[e.exitCode.toString()]); |
|
} |
|
} |
|
throw e; |
|
} |
|
} |
|
} |