Browse Source

Withdrawals working

master
Lev 2 years ago
parent
commit
ed43c06a01
  1. 2
      sources/constants.tact
  2. 22
      sources/jetton_trait.tact
  3. 3
      sources/messages.tact
  4. 2
      sources/output/jetton_Linker.abi
  5. 2
      sources/output/jetton_Linker.code.fc
  6. 2
      sources/output/jetton_Linker.code.fif
  7. 4
      sources/output/jetton_Linker.md
  8. 2
      sources/output/jetton_Linker.pkg
  9. 19
      sources/output/jetton_Linker.ts
  10. 2
      sources/output/jetton_TONB.abi
  11. BIN
      sources/output/jetton_TONB.code.boc
  12. 41
      sources/output/jetton_TONB.code.fc
  13. 130
      sources/output/jetton_TONB.code.fif
  14. 248
      sources/output/jetton_TONB.code.rev.fif
  15. 6
      sources/output/jetton_TONB.md
  16. 2
      sources/output/jetton_TONB.pkg
  17. 23
      sources/output/jetton_TONB.ts
  18. 2
      sources/output/jetton_TONBWallet.abi
  19. BIN
      sources/output/jetton_TONBWallet.code.boc
  20. 79
      sources/output/jetton_TONBWallet.code.fc
  21. 196
      sources/output/jetton_TONBWallet.code.fif
  22. 388
      sources/output/jetton_TONBWallet.code.rev.fif
  23. BIN
      sources/output/jetton_TONBWallet.init.boc
  24. 11
      sources/output/jetton_TONBWallet.init.fc
  25. 27
      sources/output/jetton_TONBWallet.init.fif
  26. 29
      sources/output/jetton_TONBWallet.init.rev.fif
  27. 6
      sources/output/jetton_TONBWallet.md
  28. 2
      sources/output/jetton_TONBWallet.pkg
  29. 25
      sources/output/jetton_TONBWallet.ts
  30. 18
      sources/tests/__snapshots__/jetton.spec.ts.snap
  31. 8
      sources/tests/jetton.spec.ts
  32. 15
      sources/wallet.tact

2
sources/constants.tact

@ -3,4 +3,4 @@ const gas_consumption: Int = ton("0.01");
const withdraw_gas_consumption: Int = ton("0.01");
const deposit_gas_consumption: Int = ton("0.01"); // Gas consumption during processing
const linker_credit: Int = ton("0.02"); // TON to send to the linker for the fees
const wallet_credit: Int = ton("0.04"); // TON to send to the wallet for the fees
const wallet_credit: Int = ton("0.05"); // TON to send to the wallet for the fees

22
sources/jetton_trait.tact

@ -41,19 +41,14 @@ trait TONBTrait with Ownable {
// Update supply
self.totalSupply = self.totalSupply - msg.amount;
/* todo: if not enough tokens, withdraw what we have, send some tokens to the owner, add a withdrawal request */
// Cashback
if (msg.responseAddress != null) {
send(SendParameters{
to: msg.responseAddress!!,
value: 0,
bounce: false,
mode: SendRemainingValue + SendIgnoreErrors,
body: TokenExcesses{
queryId: msg.queryId
}.toCell()
});
}
// Withdraw
send(SendParameters{
to: msg.owner,
value: msg.amount,
bounce: false
});
}
@ -111,7 +106,8 @@ trait TONBTrait with Ownable {
responseAddress: responseAddress,
forwardTonAmount: 0,
forwardPayload: emptySlice(),
setLinker: linker_address
setLinker: self.n_linkers - 1,
setLinkerAddress: linker_address
}.toCell();
send(SendParameters{
to: walletAddress,

3
sources/messages.tact

@ -15,7 +15,8 @@ message(0x178d4519) TokenTransferInternal {
responseAddress: Address?;
forwardTonAmount: Int as coins;
forwardPayload: Slice as remaining;
setLinker: Address?;
setLinker: Int?;
setLinkerAddress: Address?;
}
message(0x7362d09c) TokenNotification {

2
sources/output/jetton_Linker.abi

File diff suppressed because one or more lines are too long

2
sources/output/jetton_Linker.code.fc

@ -151,5 +151,5 @@ _ supported_interfaces() method_id {
}
_ get_abi_ipfs() {
return "ipfs://QmXsiG6UvpNzjujBxShses6JYADwX9LFvLtVUBva7kHxgm";
return "ipfs://QmP8qFn4KBRoGwXGpZzK8E7torCEscLLo8Ror4EcyYkigW";
}

2
sources/output/jetton_Linker.code.fif

@ -200,6 +200,6 @@ PROGRAM{
209801025412363888721030803524359905849 PUSHINT
}>
get_abi_ipfs PROC:<{
x{697066733a2f2f516d58736947365576704e7a6a756a42785368736573364a5941447758394c46764c745655427661376b4878676d} PUSHSLICE
x{697066733a2f2f516d503871466e344b42526f47775847705a7a4b384537746f72434573634c4c6f38526f7234456379596b696757} PUSHSLICE
}>
}END>c

4
sources/output/jetton_Linker.md

@ -22,8 +22,8 @@ TLB: `token_transfer#0f8a7ea5 queryId:uint64 amount:coins destination:address re
Signature: `TokenTransfer{queryId:uint64,amount:coins,destination:address,responseDestination:Maybe address,customPayload:Maybe ^cell,forwardTonAmount:coins,forwardPayload:remainder<slice>}`
## TokenTransferInternal
TLB: `token_transfer_internal#178d4519 queryId:uint64 amount:coins from:address responseAddress:Maybe address forwardTonAmount:coins forwardPayload:remainder<slice> setLinker:Maybe address = TokenTransferInternal`
Signature: `TokenTransferInternal{queryId:uint64,amount:coins,from:address,responseAddress:Maybe address,forwardTonAmount:coins,forwardPayload:remainder<slice>,setLinker:Maybe address}`
TLB: `token_transfer_internal#178d4519 queryId:uint64 amount:coins from:address responseAddress:Maybe address forwardTonAmount:coins forwardPayload:remainder<slice> setLinker:Maybe int257 setLinkerAddress:Maybe address = TokenTransferInternal`
Signature: `TokenTransferInternal{queryId:uint64,amount:coins,from:address,responseAddress:Maybe address,forwardTonAmount:coins,forwardPayload:remainder<slice>,setLinker:Maybe int257,setLinkerAddress:Maybe address}`
## TokenNotification
TLB: `token_notification#7362d09c queryId:uint64 amount:coins from:address forwardPayload:remainder<slice> = TokenNotification`

2
sources/output/jetton_Linker.pkg

File diff suppressed because one or more lines are too long

19
sources/output/jetton_Linker.ts

@ -247,7 +247,8 @@ export type TokenTransferInternal = {
responseAddress: Address | null;
forwardTonAmount: bigint;
forwardPayload: Cell;
setLinker: Address | null;
setLinker: bigint | null;
setLinkerAddress: Address | null;
}
export function storeTokenTransferInternal(src: TokenTransferInternal) {
@ -261,7 +262,8 @@ export function storeTokenTransferInternal(src: TokenTransferInternal) {
b_0.storeCoins(src.forwardTonAmount);
b_0.storeBuilder(src.forwardPayload.asBuilder());
let b_1 = new Builder();
b_1.storeAddress(src.setLinker);
if (src.setLinker !== null && src.setLinker !== undefined) { b_1.storeBit(true).storeInt(src.setLinker, 257); } else { b_1.storeBit(false); }
b_1.storeAddress(src.setLinkerAddress);
b_0.storeRef(b_1.endCell());
};
}
@ -276,8 +278,9 @@ export function loadTokenTransferInternal(slice: Slice) {
let _forwardTonAmount = sc_0.loadCoins();
let _forwardPayload = sc_0.asCell();
let sc_1 = sc_0.loadRef().beginParse();
let _setLinker = sc_1.loadMaybeAddress();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker };
let _setLinker = sc_1.loadBit() ? sc_1.loadIntBig(257) : null;
let _setLinkerAddress = sc_1.loadMaybeAddress();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker, setLinkerAddress: _setLinkerAddress };
}
function loadTupleTokenTransferInternal(source: TupleReader) {
@ -287,8 +290,9 @@ function loadTupleTokenTransferInternal(source: TupleReader) {
let _responseAddress = source.readAddressOpt();
let _forwardTonAmount = source.readBigNumber();
let _forwardPayload = source.readCell();
let _setLinker = source.readAddressOpt();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker };
let _setLinker = source.readBigNumberOpt();
let _setLinkerAddress = source.readAddressOpt();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker, setLinkerAddress: _setLinkerAddress };
}
function storeTupleTokenTransferInternal(source: TokenTransferInternal) {
@ -299,7 +303,8 @@ function storeTupleTokenTransferInternal(source: TokenTransferInternal) {
builder.writeAddress(source.responseAddress);
builder.writeNumber(source.forwardTonAmount);
builder.writeSlice(source.forwardPayload);
builder.writeAddress(source.setLinker);
builder.writeNumber(source.setLinker);
builder.writeAddress(source.setLinkerAddress);
return builder.build();
}

2
sources/output/jetton_TONB.abi

File diff suppressed because one or more lines are too long

BIN
sources/output/jetton_TONB.code.boc

Binary file not shown.

41
sources/output/jetton_TONB.code.fc

@ -79,8 +79,8 @@ cell __tact_dict_get_code(cell dict, int id) inline {
return data;
}
builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, slice, int, slice, slice) v) inline_ref {
var (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload, v'setLinker) = v;
builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, slice, int, slice, int, slice) v) inline_ref {
var (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload, v'setLinker, v'setLinkerAddress) = v;
build_0 = store_uint(build_0, 395134233, 32);
build_0 = build_0.store_uint(v'queryId, 64);
build_0 = build_0.store_coins(v'amount);
@ -89,12 +89,13 @@ builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, sli
build_0 = build_0.store_coins(v'forwardTonAmount);
build_0 = build_0.store_slice(v'forwardPayload);
var build_1 = begin_cell();
build_1 = __tact_store_address_opt(build_1, v'setLinker);
build_1 = ~ null?(v'setLinker) ? build_1.store_int(true, 1).store_int(v'setLinker, 257) : build_1.store_int(false, 1);
build_1 = __tact_store_address_opt(build_1, v'setLinkerAddress);
build_0 = store_ref(build_0, build_1.end_cell());
return build_0;
}
cell __gen_writecell_TokenTransferInternal((int, int, slice, slice, int, slice, slice) v) inline_ref {
cell __gen_writecell_TokenTransferInternal((int, int, slice, slice, int, slice, int, slice) v) inline_ref {
return __gen_write_TokenTransferInternal(begin_cell(), v).end_cell();
}
@ -121,17 +122,6 @@ cell __gen_writecell_TokenBurn((int, int, slice, slice) v) inline_ref {
return (sc_0, (v'queryId, v'amount, v'owner, v'responseAddress));
}
builder __gen_write_TokenExcesses(builder build_0, (int) v) inline_ref {
var (v'queryId) = v;
build_0 = store_uint(build_0, 3576854235, 32);
build_0 = build_0.store_uint(v'queryId, 64);
return build_0;
}
cell __gen_writecell_TokenExcesses((int) v) inline_ref {
return __gen_write_TokenExcesses(begin_cell(), v).end_cell();
}
(slice, ((cell))) __gen_read_TokenUpdateContent(slice sc_0) inline_ref {
throw_unless(129, sc_0~load_uint(32) == 201882270);
var v'content = sc_0~load_int(1) ? sc_0~load_ref() : null();
@ -161,13 +151,14 @@ cell __gen_writecell_SetLinkerNeighbor((slice) v) inline_ref {
return (sc_0, (v'amount));
}
builder __gen_write_TONBWallet(builder build_0, (int, slice, slice, slice) v) inline_ref {
var (v'balance, v'owner, v'master, v'linker) = v;
builder __gen_write_TONBWallet(builder build_0, (int, slice, slice, int, slice) v) inline_ref {
var (v'balance, v'owner, v'master, v'linker, v'linker_address) = v;
build_0 = build_0.store_int(v'balance, 257);
build_0 = __tact_store_address(build_0, v'owner);
build_0 = __tact_store_address(build_0, v'master);
var build_1 = begin_cell();
build_1 = __tact_store_address_opt(build_1, v'linker);
build_1 = ~ null?(v'linker) ? build_1.store_int(true, 1).store_int(v'linker, 257) : build_1.store_int(false, 1);
build_1 = __tact_store_address_opt(build_1, v'linker_address);
build_0 = store_ref(build_0, build_1.end_cell());
return build_0;
}
@ -301,13 +292,13 @@ slice $contractAddress((cell, cell) $s) impure {
}
cell $__gen_TONBWallet_init(cell sys', slice $master, slice $owner) {
var (($self'balance, $self'owner, $self'master, $self'linker)) = (null(), null(), null(), null());
var (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address)) = (null(), null(), null(), null(), null());
$self'balance = 0;
$self'owner = $owner;
$self'master = $master;
var b' = begin_cell();
b' = b'.store_ref(sys');
b' = __gen_write_TONBWallet(b', ($self'balance, $self'owner, $self'master, $self'linker));
b' = __gen_write_TONBWallet(b', ($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address));
return b'.end_cell();
}
@ -386,8 +377,8 @@ _ $__gen_get_get_jetton_data() method_id(106029) {
$send((false, $linker_address, 20000000, 0, __gen_writecell_SetLinkerNeighbor(($self'last_linker)), $linker_init'code, $linker_init'data));
$self'last_linker = $linker_address;
$self'n_linkers = ($self'n_linkers + 1);
cell $wallet_msg_body = __gen_writecell_TokenTransferInternal((0, $amount, my_address(), $responseAddress, 0, $emptySlice(), $linker_address));
$send((false, $walletAddress, 40000000, 0, $wallet_msg_body, $winit'code, $winit'data));
cell $wallet_msg_body = __gen_writecell_TokenTransferInternal((0, $amount, my_address(), $responseAddress, 0, $emptySlice(), ($self'n_linkers - 1), $linker_address));
$send((false, $walletAddress, 50000000, 0, $wallet_msg_body, $winit'code, $winit'data));
return (($self'totalSupply, $self'owner, $self'content, $self'mintable, $self'first_linker, $self'last_linker, $self'n_linkers, $self'staking_pool), ());
}
@ -460,9 +451,7 @@ _ $__gen_get_owner() method_id(83229) {
var ($msg'queryId, $msg'amount, $msg'owner, $msg'responseAddress) = $msg;
($self'totalSupply, $self'owner, $self'content, $self'mintable, $self'first_linker, $self'last_linker, $self'n_linkers, $self'staking_pool)~$__gen_TONB_requireWallet($msg'owner);
$self'totalSupply = ($self'totalSupply - $msg'amount);
if ((~ null?($msg'responseAddress))) {
$send((false, __tact_not_null($msg'responseAddress), 0, (64 + 2), __gen_writecell_TokenExcesses(($msg'queryId)), null(), null()));
}
$send((false, $msg'owner, $msg'amount, 0, null(), null(), null()));
return (($self'totalSupply, $self'owner, $self'content, $self'mintable, $self'first_linker, $self'last_linker, $self'n_linkers, $self'staking_pool), ());
}
@ -542,5 +531,5 @@ _ supported_interfaces() method_id {
}
_ get_abi_ipfs() {
return "ipfs://QmPvEiZGrqt4f1VDKeQxyzgba7g5qVaCcnFiXAyVCz4R9o";
return "ipfs://QmRq7Ws4rcHn99Mv8T1S9fKrCFxp46UnQyae1gPiBrqj5M";
}

130
sources/output/jetton_TONB.code.fif

@ -17,8 +17,6 @@ PROGRAM{
DECLPROC __gen_write_TokenBurn
DECLPROC __gen_writecell_TokenBurn
DECLPROC __gen_read_TokenBurnNotification
DECLPROC __gen_write_TokenExcesses
DECLPROC __gen_writecell_TokenExcesses
DECLPROC __gen_read_TokenUpdateContent
DECLPROC __gen_write_SetLinkerNeighbor
DECLPROC __gen_writecell_SetLinkerNeighbor
@ -162,13 +160,13 @@ PROGRAM{
}>
__gen_write_TokenTransferInternal PROCREF:<{
395134233 PUSHINT
s0 s8 XCHG2
s0 s9 XCHG2
32 STU
s1 s6 XCHG
s1 s7 XCHG
64 STU
s0 s4 XCHG2
s0 s5 XCHG2
STGRAMS
ROT
s0 s3 XCHG2
__tact_store_address INLINECALLDICT
SWAP
__tact_store_address_opt INLINECALLDICT
@ -177,6 +175,22 @@ PROGRAM{
SWAP
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
IF:<{
TRUE
SWAP
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}>ELSE<{
s2 POP
FALSE
ROT
1 STI
}>
ROT
__tact_store_address_opt INLINECALLDICT
ENDC
@ -185,7 +199,7 @@ PROGRAM{
}>
__gen_writecell_TokenTransferInternal PROCREF:<{
NEWC
7 -ROLL
8 -ROLL
__gen_write_TokenTransferInternal INLINECALLDICT
ENDC
}>
@ -222,18 +236,6 @@ PROGRAM{
s1 s4 XCHG
s3 s3 s0 XCHG3
}>
__gen_write_TokenExcesses PROCREF:<{
3576854235 PUSHINT
ROT
32 STU
64 STU
}>
__gen_writecell_TokenExcesses PROCREF:<{
NEWC
SWAP
__gen_write_TokenExcesses INLINECALLDICT
ENDC
}>
__gen_read_TokenUpdateContent PROCREF:<{
32 LDU
SWAP
@ -283,14 +285,30 @@ PROGRAM{
SWAP
}>
__gen_write_TONBWallet PROCREF:<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
SWAP
ROT
__tact_store_address INLINECALLDICT
SWAP
__tact_store_address INLINECALLDICT
NEWC
s2 PUSH
ISNULL
NOT
IF:<{
TRUE
SWAP
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}>ELSE<{
s2 POP
FALSE
ROT
1 STI
}>
ROT
__tact_store_address_opt INLINECALLDICT
ENDC
@ -522,13 +540,14 @@ PROGRAM{
SENDRAWMSG
}>
$__gen_TONBWallet_init PROC:<{
PUSHNULL
PUSHNULL
0 PUSHINT
s0 s4 XCHG
s0 s5 XCHG
NEWC
STREF
s0 s4 XCHG
s3 s3 XCHG2
s0 s5 XCHG
s4 s4 s4 XCHG3
__gen_write_TONBWallet INLINECALLDICT
ENDC
}>
@ -639,16 +658,19 @@ PROGRAM{
MYADDR
OVER
$emptySlice CALLDICT
s3 s6 XCHG
s5 16 s() XCHG
s2 s4 XCHG
s3 17 s() XCHG
s1 s0 s10 XCHG3
s4 PUSH
DEC
s4 s7 XCHG
s6 17 s() XCHG
s3 s5 XCHG
s4 18 s() XCHG
3 ROLL
s0 s11 XCHG
__gen_writecell_TokenTransferInternal INLINECALLDICT
FALSE
s0 s4 XCHG
s3 s11 XCHG
40000000 PUSHINT
50000000 PUSHINT
s0 s3 XCHG
0 PUSHINT
s3 s1 s3 XCHG3
@ -754,41 +776,21 @@ PROGRAM{
4 ROLL
}>
$__gen_TONB_receive_TokenBurnNotification PROC:<{
s8 s11 XCHG
s7 s10 XCHG
s6 s9 XCHG
s5 s11 XCHG
s4 s10 XCHG
s3 s9 XCHG
s11 s10 s10 XCHG3
DROP
s2 POP
8 2 BLKSWAP
s9 PUSH
$__gen_TONB_requireWallet CALLDICT
s7 s10 XCHG2
s7 s8 XCPU
SUB
s8 PUSH
ISNULL
NOT
IF:<{
FALSE
s0 s9 XCHG
__tact_not_null CALLDICT
0 PUSHINT
66 PUSHINT
s0 s10 XCHG
__gen_writecell_TokenExcesses INLINECALLDICT
s4 s11 XCHG
s1 s3 s0 XCHG3
s1 s10 XCHG
PUSHNULL
PUSHNULL
$send CALLDICT
}>ELSE<{
s7 POP
s7 POP
}>
s5 s7 XCHG
s3 s6 XCHG
s5 s1 s3 XCHG3
s4 s2 XCHG2
FALSE
s0 s10 s9 XCHG3
0 PUSHINT
PUSHNULL
PUSHNULL
PUSHNULL
$send CALLDICT
2 5 BLKSWAP
}>
recv_internal PROC:<{
0 PUSHINT
@ -916,6 +918,6 @@ PROGRAM{
86142586315491086060343270784266291122 PUSHINT
}>
get_abi_ipfs PROC:<{
x{697066733a2f2f516d507645695a4772717434663156444b655178797a67626137673571566143636e466958417956437a3452396f} PUSHSLICE
x{697066733a2f2f516d5271375773347263486e39394d763854315339664b72434678703436556e51796165316750694272716a354d} PUSHSLICE
}>
}END>c

248
sources/output/jetton_TONB.code.rev.fif

@ -133,7 +133,7 @@ SETCP0
s4 s5 XCHG
s3 s4 XCHG
s1 s3 s0 XCHG3
52 CALLDICT
50 CALLDICT
<{
NEWC
2 GETGLOBVAR
@ -298,7 +298,7 @@ SETCP0
}> CALLREF
1 8 BLKDROP2
}> CALLREF
53 CALLDICT
51 CALLDICT
<{
NEWC
2 GETGLOBVAR
@ -478,7 +478,7 @@ SETCP0
s4 s5 XCHG
s3 s4 XCHG
s1 s3 s0 XCHG3
54 CALLDICT
52 CALLDICT
<{
NEWC
2 GETGLOBVAR
@ -665,7 +665,7 @@ SETCP0
s4 s5 XCHG
s3 s4 XCHG
s1 s3 s0 XCHG3
55 CALLDICT
53 CALLDICT
<{
NEWC
2 GETGLOBVAR
@ -861,7 +861,7 @@ SETCP0
s5 s6 XCHG
s4 s5 XCHG
1 3 BLKSWAP
56 CALLDICT
54 CALLDICT
<{
NEWC
2 GETGLOBVAR
@ -951,20 +951,20 @@ SETCP0
ISNULL
128 THROWIF
32:
30:
35:
33:
NEWC
ENDC
36:
34:
CTOS
37:
35 CALLDICT
36 CALLDICT
35:
33 CALLDICT
34 CALLDICT
38:
36:
0 PUSHINT
ROTREV
NEWC
@ -995,7 +995,7 @@ SETCP0
ENDC
CTOS
39:
37:
NEWC
1 PUSHINT
s0 s1 XCHG
@ -1112,23 +1112,42 @@ SETCP0
s0 s1 XCHG
1 STI
40:
38:
PUSHNULL
PUSHNULL
0 PUSHINT
s0 s4 XCHG
s0 s5 XCHG
NEWC
STREF
s0 s4 XCHG
s3 s3 XCHG2
s0 s5 XCHG
s4 s4 s4 XCHG3
<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
s0 s1 XCHG
ROT
STSLICER
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -1148,7 +1167,7 @@ SETCP0
}> CALLREF
ENDC
41:
39:
s0 s2 XCHG
CTOS
LDDICT
@ -1171,9 +1190,9 @@ SETCP0
STDICT
ENDC
s0 s0 s3 XCHG3
40 CALLDICT
38 CALLDICT
42:
40:
PUSHNULL
s0 s4 XCHG
NEWC
@ -1207,7 +1226,7 @@ SETCP0
}> CALLREF
ENDC
43:
41:
s0 s3 XCHG
CTOS
LDDICT
@ -1231,39 +1250,39 @@ SETCP0
ENDC
3 1 BLKSWAP
s0 s4 XCHG
42 CALLDICT
40 CALLDICT
44:
42:
2 GETGLOBVAR
MYADDR
ROT
41 CALLDICT
39 CALLDICT
45:
44 CALLDICT
43:
42 CALLDICT
8 2 BLKDROP2
38 CALLDICT
36 CALLDICT
46:
44:
MYADDR
44 CALLDICT
42 CALLDICT
4 2 BLKDROP2
s0 POP
s3 s3 s0 XCHG3
47:
45:
s10 s1 XCPU
ADD
8 2 BLKSWAP
44 CALLDICT
42 CALLDICT
2DUP
38 CALLDICT
36 CALLDICT
2 GETGLOBVAR
MYADDR
6 2 -2 PU2XC
43 CALLDICT
41 CALLDICT
2DUP
38 CALLDICT
36 CALLDICT
0 PUSHINT
20000000 PUSHINT
0 PUSHINT
@ -1296,35 +1315,38 @@ SETCP0
s4 s1 s5 XCHG3
s3 s12 XCHG
s1 s12 s0 XCHG3
39 CALLDICT
37 CALLDICT
s5 PUSH
s0 s5 XCHG
INC
0 PUSHINT
MYADDR
s1 PUSH
37 CALLDICT
s3 s6 XCHG
s0 s5 XCHG
s0 s16 XCHG
s0 s5 XCHG
s2 s4 XCHG
s0 s3 XCHG
35 CALLDICT
s4 PUSH
DEC
s4 s7 XCHG
s0 s6 XCHG
s0 s17 XCHG
s0 s3 XCHG
s1 s0 s10 XCHG3
s0 s6 XCHG
s3 s5 XCHG
s0 s4 XCHG
s0 s18 XCHG
s0 s4 XCHG
1 3 BLKSWAP
s0 s11 XCHG
<{
NEWC
7 1 BLKSWAP
8 1 BLKSWAP
<{
395134233 PUSHINT
s0 s8 XCHG2
s0 s9 XCHG2
32 STU
s1 s6 XCHG
s1 s7 XCHG
64 STU
s0 s4 XCHG2
s0 s5 XCHG2
STGRAMS
ROT
s0 s3 XCHG2
STSLICER
s0 s1 XCHG
s0 PUSH
@ -1344,6 +1366,24 @@ SETCP0
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -1366,19 +1406,19 @@ SETCP0
0 PUSHINT
s0 s4 XCHG
s3 s11 XCHG
40000000 PUSHINT
50000000 PUSHINT
s0 s3 XCHG
0 PUSHINT
s3 s1 s3 XCHG3
s0 s14 XCHG
39 CALLDICT
37 CALLDICT
s5 s7 XCHG
s4 s6 XCHG
s3 s5 XCHG
s4 s0 s3 XCHG3
s0 s2 XCHG
48:
46:
s7 s10 XCHG
s6 s9 XCHG
s5 s8 XCHG
@ -1386,9 +1426,9 @@ SETCP0
s3 s9 XCHG
s8 s10 s9 XCHG3
s8 PUSH
44 CALLDICT
42 CALLDICT
2DUP
38 CALLDICT
36 CALLDICT
0 PUSHINT
0 PUSHINT
64 PUSHINT
@ -1432,28 +1472,28 @@ SETCP0
s4 s14 XCHG
s3 s12 XCHG
s12 s2 XCHG2
39 CALLDICT
37 CALLDICT
s4 s7 XCHG
3 4 BLKSWAP
49:
47:
1 GETGLOBVAR
4 UNTUPLE
s2 s3 XCHG
3 BLKDROP
9 1 BLKSWAP
44 CALLDICT
42 CALLDICT
s0 s1 XCHG
4429 PUSHINT
s0 s2 XCHG
38 CALLDICT
36 CALLDICT
s0 s10 XCHG2
SDEQ
s1 s9 XCHG
THROWANYIFNOT
1 7 BLKSWAP
50:
48:
1 GETGLOBVAR
4 UNTUPLE
s2 s3 XCHG
@ -1462,11 +1502,11 @@ SETCP0
SDEQ
132 THROWIFNOT
51:
49:
s6 s7 XCHG
7 BLKDROP
52:
50:
1 GETGLOBVAR
4 UNTUPLE
s0 POP
@ -1477,11 +1517,11 @@ SETCP0
s1 s2 XCHG
THROWANYIFNOT
TUCK
47 CALLDICT
45 CALLDICT
53:
51:
54:
52:
1 GETGLOBVAR
4 UNTUPLE
s0 POP
@ -1492,64 +1532,32 @@ SETCP0
s1 s2 XCHG
THROWANYIFNOT
TUCK
48 CALLDICT
46 CALLDICT
55:
53:
8 1 BLKSWAP
50 CALLDICT
48 CALLDICT
s5 POP
s6 s7 XCHG
s5 s6 XCHG
1 4 BLKSWAP
56:
s8 s11 XCHG
s7 s10 XCHG
s6 s9 XCHG
s5 s11 XCHG
s4 s10 XCHG
s3 s9 XCHG
s11 s10 s10 XCHG3
49 CALLDICT
s7 s10 XCHG2
54:
s0 POP
s2 POP
8 2 BLKSWAP
s9 PUSH
47 CALLDICT
s7 s8 XCPU
SUB
s8 PUSH
ISNULL
NOT
<{
0 PUSHINT
s0 s9 XCHG
1 CALLDICT
0 PUSHINT
66 PUSHINT
s0 s10 XCHG
<{
NEWC
s0 s1 XCHG
<{
3576854235 PUSHINT
ROT
32 STU
64 STU
}> CALLREF
ENDC
}> CALLREF
s4 s11 XCHG
s1 s3 s0 XCHG3
s1 s10 XCHG
PUSHNULL
PUSHNULL
39 CALLDICT
}> PUSHCONT
<{
s7 POP
s7 POP
}> PUSHCONT
IFELSE
s5 s7 XCHG
s3 s6 XCHG
s5 s1 s3 XCHG3
s4 s2 XCHG2
0 PUSHINT
s0 s10 s9 XCHG3
0 PUSHINT
PUSHNULL
PUSHNULL
PUSHNULL
37 CALLDICT
2 5 BLKSWAP
owner:
<{
@ -1627,7 +1635,7 @@ SETCP0
}> CALLREF
1 8 BLKDROP2
}> CALLREF
51 CALLDICT
49 CALLDICT
get_wallet_address:
<{
@ -1706,7 +1714,7 @@ SETCP0
1 8 BLKDROP2
}> CALLREF
1 8 BLKSWAP
45 CALLDICT
43 CALLDICT
get_jetton_data:
<{
@ -1784,8 +1792,8 @@ SETCP0
}> CALLREF
1 8 BLKDROP2
}> CALLREF
46 CALLDICT
32 CALLDICT
44 CALLDICT
30 CALLDICT
113617:
123515602279859691144772641439386770278 PUSHINT

6
sources/output/jetton_TONB.md

@ -1,6 +1,6 @@
# TACT Compilation Report
Contract: TONB
BOC Size: 1684 bytes
BOC Size: 1708 bytes
# Types
Total Types: 18
@ -22,8 +22,8 @@ TLB: `token_transfer#0f8a7ea5 queryId:uint64 amount:coins destination:address re
Signature: `TokenTransfer{queryId:uint64,amount:coins,destination:address,responseDestination:Maybe address,customPayload:Maybe ^cell,forwardTonAmount:coins,forwardPayload:remainder<slice>}`
## TokenTransferInternal
TLB: `token_transfer_internal#178d4519 queryId:uint64 amount:coins from:address responseAddress:Maybe address forwardTonAmount:coins forwardPayload:remainder<slice> setLinker:Maybe address = TokenTransferInternal`
Signature: `TokenTransferInternal{queryId:uint64,amount:coins,from:address,responseAddress:Maybe address,forwardTonAmount:coins,forwardPayload:remainder<slice>,setLinker:Maybe address}`
TLB: `token_transfer_internal#178d4519 queryId:uint64 amount:coins from:address responseAddress:Maybe address forwardTonAmount:coins forwardPayload:remainder<slice> setLinker:Maybe int257 setLinkerAddress:Maybe address = TokenTransferInternal`
Signature: `TokenTransferInternal{queryId:uint64,amount:coins,from:address,responseAddress:Maybe address,forwardTonAmount:coins,forwardPayload:remainder<slice>,setLinker:Maybe int257,setLinkerAddress:Maybe address}`
## TokenNotification
TLB: `token_notification#7362d09c queryId:uint64 amount:coins from:address forwardPayload:remainder<slice> = TokenNotification`

2
sources/output/jetton_TONB.pkg

File diff suppressed because one or more lines are too long

23
sources/output/jetton_TONB.ts

@ -247,7 +247,8 @@ export type TokenTransferInternal = {
responseAddress: Address | null;
forwardTonAmount: bigint;
forwardPayload: Cell;
setLinker: Address | null;
setLinker: bigint | null;
setLinkerAddress: Address | null;
}
export function storeTokenTransferInternal(src: TokenTransferInternal) {
@ -261,7 +262,8 @@ export function storeTokenTransferInternal(src: TokenTransferInternal) {
b_0.storeCoins(src.forwardTonAmount);
b_0.storeBuilder(src.forwardPayload.asBuilder());
let b_1 = new Builder();
b_1.storeAddress(src.setLinker);
if (src.setLinker !== null && src.setLinker !== undefined) { b_1.storeBit(true).storeInt(src.setLinker, 257); } else { b_1.storeBit(false); }
b_1.storeAddress(src.setLinkerAddress);
b_0.storeRef(b_1.endCell());
};
}
@ -276,8 +278,9 @@ export function loadTokenTransferInternal(slice: Slice) {
let _forwardTonAmount = sc_0.loadCoins();
let _forwardPayload = sc_0.asCell();
let sc_1 = sc_0.loadRef().beginParse();
let _setLinker = sc_1.loadMaybeAddress();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker };
let _setLinker = sc_1.loadBit() ? sc_1.loadIntBig(257) : null;
let _setLinkerAddress = sc_1.loadMaybeAddress();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker, setLinkerAddress: _setLinkerAddress };
}
function loadTupleTokenTransferInternal(source: TupleReader) {
@ -287,8 +290,9 @@ function loadTupleTokenTransferInternal(source: TupleReader) {
let _responseAddress = source.readAddressOpt();
let _forwardTonAmount = source.readBigNumber();
let _forwardPayload = source.readCell();
let _setLinker = source.readAddressOpt();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker };
let _setLinker = source.readBigNumberOpt();
let _setLinkerAddress = source.readAddressOpt();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker, setLinkerAddress: _setLinkerAddress };
}
function storeTupleTokenTransferInternal(source: TokenTransferInternal) {
@ -299,7 +303,8 @@ function storeTupleTokenTransferInternal(source: TokenTransferInternal) {
builder.writeAddress(source.responseAddress);
builder.writeNumber(source.forwardTonAmount);
builder.writeSlice(source.forwardPayload);
builder.writeAddress(source.setLinker);
builder.writeNumber(source.setLinker);
builder.writeAddress(source.setLinkerAddress);
return builder.build();
}
@ -960,8 +965,8 @@ function dictValueParserWithdraw(): DictionaryValue<Withdraw> {
}
async function TONB_init(owner: Address, content: Cell | null) {
const __init = 'te6ccgEBBwEAhgABFP8A9KQT9LzyyAsBAgFiAgMCAs0EBQAJoUrd4AsAAdQBJWW1tcG0hfwjIzAhEdBYVE9s8yYGAJpQh/oCUAXPFiNus5Z/AcoAE8yWM3BQA8oA4soAASBulTBwAcsBks8W4gEgbpUwcAHLAZLPFuICyIEBAc8AASBulTBwAcsBks8W4skBzA==';
const __code = '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';
const __system = 'te6cckECkgEADIsAAQHAAQIBIF4CAgFYEwMBBbVJcAQBFP8A9KQT9LzyyAsFAgFiCwYCASAKBwIBIAkIAQ25W92zzwDokABNu70YJwXOw9XSyuex6E7DnWSoUbZoJwndY1LStkfLMi068t/fFiOYAQ2+KO7Z54BskAICzBEMAgFYEA0CASAPDgAfDH4QW8kW4ERTTIkxwXy9IAAJBAjXwOAAB1E18DgDi9uBDrpOEPypgQa4WP7wFoaYGAuNhgAMi/yLhxAP0gESgzN4J8MIFIrfBBCFn+emDdR8dtngJtnhiIGiCYeAftnnAYeWBBSQEo4ANtMfAYIQs/z0wbry4IH6QCHXCwHDAJEBkjFt4gEFtQJwFAEU/wD0pBP0vPLICxUCAWIdFgIBIBwXAgFIGRgAlbd6ME4LnYerpZXPY9CdhzrJUKNs0E4TusalpWyPlmRadeW/vixHME4YTIikya+3yRcvbDO06rpAsE4IGc6tPOK/OkoWA6wtxMj2UAIBWBsaARGvFu2eeBd4EEBcARGtvO2eKoP4FsBcAQ2+KO7Z54GcXAICyk8eAgEgMh8CASAhIAFv2IRYg9CDSILYglCByl1XgYqD1QlDdZx0m4BPgAuEAhBW2eCCWgmA02tvgTyRub8QgriBsiiaghRuAgEgKSICASAmIwIBICUkABcVXDwMjUQZxBWVQOAAKz4QW8kMIEY8DOCCJiWgL4S8vRm8DCACASAoJwABIAArPhBbyQwgX5uM4IImJaAvhLy9GbwL4AIBIC0qAgEgLCsACQQZ18HgAB0+EFvJBAjXwMnxwXy4ISACASAvLgA5PhBbyQQI18DVYDwLAGBEU0C8CZQCscFGfL0VQaABYwQehBpEFgQShA5SKko8Cxc8CZwcIBAVEETAhERAhEQH9s8EG0VEE4QPFDC8CcQR1UjgMAEMyFUw2zzJMQBAghBZXwe8UAXLHxPLPwH6AgHPFgEgbpUwcAHLAZLPFuICASBDMwIBID00AgEgOjUCASA5NgK7FGhoFVx8Cxc8Cb4QvgoVGYw8Ctc8CZwggkxLQBwC9s8IxA2RBUQPEHA8CclBaRw+Cgh8CUQNgUREAUQJAMREQNBCts8cAQQO4IKYloAA3BDEw7wJxBXEEYQNUQDAoDd2AQrIAds8yTgALIIQs/z0wVjLHwEgbpUwcAHLAZLPFuIAEz4KPAsbEIwQzCACASA8OwANPAsbILwJoAAPPhC+ChY8CmACASBBPgIBIEA/AFMA9D0BDBtAYIA6ksBgBD0D2+h8uCHAYIA6ksiAoAQ9BfI9ADJVSAE8CqABExtBMjMUCTbPMmCPAgEge0IATQC0PQEMG0BgWCEAYAQ9A9vofLghwGBYIQiAoAQ9BfI9ADJQAPwKIAIBIExEAgEgSUUCASBIRgL3MhxAcoBUAcBygBwAcoCUAXPFlAD+gJwAcpoI26zJW6zsY5GfwHKAMhwAcoAcAHKACRus5p/AcoABPABUATMljQDcAHKAOIkbrOafwHKAATwAVAEzJY0A3ABygDicAHKAAJ/AcoAAslYzJczMwFwAcoA4iFus+MPyQH7AIEeAABJ/AcoAAfABAcwASxwWchwAcsBcwHLAXABywASzMzJ+QDIcgHLAXABywASygfL/8nQgAgEgS0oACTwI/AkgAAM0IAIBIE5NAAVcjJgAAUgCAdJRUAALCBu8tCAgBKkcCHXScIflTAg1wsf3gLQ0wMBcbDAAZF/kXDiAfpAIlBmbwT4YQKRW+AgghAh7rYHuo+XMNs8CNs8MRB4EGcQVhBFEDRBMPA02zzgIMAAItdJwSGwgXFtZUgQ4jwdb2zzwNds84CCCEGBZFRC64wIgghAMCHqeulxZV1MEQo+XMNs8CNs8MRB4EGcQVhBFEDRBMPA32zzgghB73ZfeulxWWVQDQo+a2zwI2zw0EKsQmhCJEHgQZxBWEEVVAvA42zzgMPLAglxVWQBM0x8BghB73ZfeuvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeIUQzAALtMfAYIQDAh6nrry4IHSAAGR1JJtAeIBAy4w2zwI2zwxEHgQZxBWEEUQNEEw8DbbPFxYWQAm0x8BghBgWRUQuvLggYEBAdcAAQEYyPhCAcxVcNs8ye1UWgCaUIf6AlAFzxYjbrOWfwHKABPMljNwUAPKAOLKAAEgbpUwcAHLAZLPFuIBIG6VMHABywGSzxbiAsiBAQHPAAEgbpUwcAHLAZLPFuLJAcwAINMfAYIQIe62B7ry4IH6AAEBFu1E0NQB+GLbPGwYXQCk+gD6QAEB0gABkdSSbQHi0gD6QCHXCwHDAJEBkjFt4gH6QCHXCwHDAJEBkjFt4gHUAdCBAQHXAPpAIdcLAcMAkQGSMW3iMRAoECcQJhAlECQQIwEFvwQkXwEU/wD0pBP0vPLIC2ACAWJkYQIBIGNiAHG93owTgudh6ullc9j0J2HOslQo2zQThO6xqWlbI+WZFp15b++LEcwThO6PAB8tmwHk/kHVks1lEJwBEb/YFtnngTeA9JACAsqDZQIBSHJmAgFIaGcAT0gCDXIdMf0z8x+gAwgTVSIoIQF41FGboDghB73ZfeuhOxEvL0FKADgCASBsaQGjFv4QW8kgRFNUznHBVNJxwWxU0jHBbHy9FGUoYIA9fwhwv/y9EMwUjrwI4E+uwGCCTEtAKCCCJiWgKASvPL0f3ADgEBUM3fbPFQTBVAzbW3wIoGoBDMhVMNs8yWsAQIIQe92X3lAFyx8Tyz8B+gIBzxYBIG6VMHABywGSzxbiAvc+EFvJCtukzsQOpE04lMbxwWzUyvHBbOwjhL4QlPI8CUBgRFNAvAhI8cF8vTeUdigggD1/CHC//L0LfgnbxAhoYIImJaAZrYIoYIImJaAoKEmwgCOnlDk8CNSMKChcHAoSBNQdNs8KRBGQxNQVW1t8CJQBpYQflCJXwjigcG0BPCZusyLCALCOkXAH8AJwBNs8EEhDMBhtbfAikjZb4m4BCsgB2zzJbwAWghDVMnbbWMsfyz8BDMhVMNs8yXEALIIQc2LQnFAFyx8Tyz8B+gIBzxYBzxYCASB8cwIBIHl0AgEgeHUBuRsIvhBbySBEU1TPMcF8vRRx6GCAPX8IcL/8vRDMFI98CNxJMIAkjBy3oE+uwKoggkxLQCgggiYloCgErzy9PhCVCB08CVc8CF/UHZwgEBtLVE+A0mp2zwQVlnwIoHYBDMhVYNs8yXcAcIIQF41FGVAIyx8Wyz9QBPoCWM8WASBulTBwAcsBks8W4gH6AgHPFshYIG6VMHABywGSzxbiyQHMABEMPhCUxLwJTCACASB7egBNALQ9AQwbQGBYIQBgBD0D2+h8uCHAYFghCICgBD0F8j0AMlAA/AkgARcbXAEyMwEUDPbPMmCPAgEggn0CASB/fgAlGwx+gAxcdch+gAx+gAwpwOrAIAL3MhxAcoBUAcBygBwAcoCUAXPFlAD+gJwAcpoI26zJW6zsY5GfwHKAMhwAcoAcAHKACRus5p/AcoABPACUATMljQDcAHKAOIkbrOafwHKAATwAlAEzJY0A3ABygDicAHKAAJ/AcoAAslYzJczMwFwAcoA4iFus+MPyQH7AIIGAAAoxcAHKAAASfwHKAAHwAgHMAEtXBZyHABywFzAcsBcAHLABLMzMn5AMhyAcsBcAHLABLKB8v/ydCAIBIIWEAAOnQAIBYoeGAAtCBu8tCAgEiUcCHXScIflTAg1wsf3gLQ0wMBcbDAAZF/kXDiAfpAIlBmbwT4YQKPCTDbPFUD8CrbPOAgghAPin6luuMCIIIQF41FGbqJCOjIgEOo+TMNs8BNs8NxCaEIkQeFUF8CjbPOCCEFlfB7y6kIuOiQMyj5LbPATbPDQQZxBWEEVVAvAp2zzgMPLAgpCKjgBM0x8BghBZXwe8uvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeIUQzAAftMfAYIQF41FGbry4IHTP/oA+kABAfpAIdcLAcMAkQGSMW3iAfoAINQB0PpAIdcLAcMAkQGSMW3iMRcWFRRDMAMmMNs8BNs8NxCaEIkQeFUF8CfbPJCNjgBs0x8BghAPin6luvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeIB0gABkdSSbQHi+gBRZhYVFEMwARjI+EIBzFUw2zzJ7VSPADxQNIEBAc8AAc8WAc8WyFggbpUwcAHLAZLPFuLJAcwBFu1E0NQB+GLbPGwUkQBEgQEB1wD6QAEB+kABAdQB0PpAIdcLAcMAkQGSMW3iMRRDMBQGkS0=';
const __code = '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';
const __system = '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';
let systemCell = Cell.fromBase64(__system);
let builder = new TupleBuilder();
builder.writeCell(systemCell);

2
sources/output/jetton_TONBWallet.abi

File diff suppressed because one or more lines are too long

BIN
sources/output/jetton_TONBWallet.code.boc

Binary file not shown.

79
sources/output/jetton_TONBWallet.code.fc

@ -99,8 +99,8 @@ cell __tact_dict_get_code(cell dict, int id) inline {
return (sc_0, (v'queryId, v'amount, v'destination, v'responseDestination, v'customPayload, v'forwardTonAmount, v'forwardPayload));
}
builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, slice, int, slice, slice) v) inline_ref {
var (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload, v'setLinker) = v;
builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, slice, int, slice, int, slice) v) inline_ref {
var (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload, v'setLinker, v'setLinkerAddress) = v;
build_0 = store_uint(build_0, 395134233, 32);
build_0 = build_0.store_uint(v'queryId, 64);
build_0 = build_0.store_coins(v'amount);
@ -109,16 +109,17 @@ builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, sli
build_0 = build_0.store_coins(v'forwardTonAmount);
build_0 = build_0.store_slice(v'forwardPayload);
var build_1 = begin_cell();
build_1 = __tact_store_address_opt(build_1, v'setLinker);
build_1 = ~ null?(v'setLinker) ? build_1.store_int(true, 1).store_int(v'setLinker, 257) : build_1.store_int(false, 1);
build_1 = __tact_store_address_opt(build_1, v'setLinkerAddress);
build_0 = store_ref(build_0, build_1.end_cell());
return build_0;
}
cell __gen_writecell_TokenTransferInternal((int, int, slice, slice, int, slice, slice) v) inline_ref {
cell __gen_writecell_TokenTransferInternal((int, int, slice, slice, int, slice, int, slice) v) inline_ref {
return __gen_write_TokenTransferInternal(begin_cell(), v).end_cell();
}
(slice, ((int, int, slice, slice, int, slice, slice))) __gen_read_TokenTransferInternal(slice sc_0) inline_ref {
(slice, ((int, int, slice, slice, int, slice, int, slice))) __gen_read_TokenTransferInternal(slice sc_0) inline_ref {
throw_unless(129, sc_0~load_uint(32) == 395134233);
var v'queryId = sc_0~load_uint(64);
var v'amount = sc_0~load_coins();
@ -127,8 +128,9 @@ cell __gen_writecell_TokenTransferInternal((int, int, slice, slice, int, slice,
var v'forwardTonAmount = sc_0~load_coins();
var v'forwardPayload = sc_0;
slice sc_1 = sc_0~load_ref().begin_parse();
var v'setLinker = sc_1~__tact_load_address_opt();
return (sc_0, (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload, v'setLinker));
var v'setLinker = sc_1~load_int(1) ? sc_1~load_int(257) : null();
var v'setLinkerAddress = sc_1~__tact_load_address_opt();
return (sc_0, (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload, v'setLinker, v'setLinkerAddress));
}
builder __gen_write_TokenNotification(builder build_0, (int, int, slice, slice) v) inline_ref {
@ -179,24 +181,26 @@ cell __gen_writecell_TokenExcesses((int) v) inline_ref {
return __gen_write_TokenExcesses(begin_cell(), v).end_cell();
}
builder __gen_write_TONBWallet(builder build_0, (int, slice, slice, slice) v) inline_ref {
var (v'balance, v'owner, v'master, v'linker) = v;
builder __gen_write_TONBWallet(builder build_0, (int, slice, slice, int, slice) v) inline_ref {
var (v'balance, v'owner, v'master, v'linker, v'linker_address) = v;
build_0 = build_0.store_int(v'balance, 257);
build_0 = __tact_store_address(build_0, v'owner);
build_0 = __tact_store_address(build_0, v'master);
var build_1 = begin_cell();
build_1 = __tact_store_address_opt(build_1, v'linker);
build_1 = ~ null?(v'linker) ? build_1.store_int(true, 1).store_int(v'linker, 257) : build_1.store_int(false, 1);
build_1 = __tact_store_address_opt(build_1, v'linker_address);
build_0 = store_ref(build_0, build_1.end_cell());
return build_0;
}
(slice, ((int, slice, slice, slice))) __gen_read_TONBWallet(slice sc_0) inline_ref {
(slice, ((int, slice, slice, int, slice))) __gen_read_TONBWallet(slice sc_0) inline_ref {
var v'balance = sc_0~load_int(257);
var v'owner = sc_0~__tact_load_address();
var v'master = sc_0~__tact_load_address();
slice sc_1 = sc_0~load_ref().begin_parse();
var v'linker = sc_1~__tact_load_address_opt();
return (sc_0, (v'balance, v'owner, v'master, v'linker));
var v'linker = sc_1~load_int(1) ? sc_1~load_int(257) : null();
var v'linker_address = sc_1~__tact_load_address_opt();
return (sc_0, (v'balance, v'owner, v'master, v'linker, v'linker_address));
}
_ __gen_StateInit_get_code((cell, cell) v) inline {
@ -209,13 +213,13 @@ _ __gen_StateInit_get_code((cell, cell) v) inline {
return (v'balance, v'owner, v'master, v'walletCode);
}
(int, slice, slice, slice) __gen_load_TONBWallet() inline_ref {
(int, slice, slice, int, slice) __gen_load_TONBWallet() inline_ref {
slice sc = get_data().begin_parse();
__tact_context_sys = sc~load_ref();
return sc~__gen_read_TONBWallet();
}
() __gen_store_TONBWallet((int, slice, slice, slice) v) impure inline_ref {
() __gen_store_TONBWallet((int, slice, slice, int, slice) v) impure inline_ref {
builder b = begin_cell();
b = b.store_ref(__tact_context_sys);
b = __gen_write_TONBWallet(b, v);
@ -281,13 +285,13 @@ int $__gen_Context_readForwardFee((int, slice, int, slice) $self) impure {
}
cell $__gen_TONBWallet_init(cell sys', slice $master, slice $owner) {
var (($self'balance, $self'owner, $self'master, $self'linker)) = (null(), null(), null(), null());
var (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address)) = (null(), null(), null(), null(), null());
$self'balance = 0;
$self'owner = $owner;
$self'master = $master;
var b' = begin_cell();
b' = b'.store_ref(sys');
b' = __gen_write_TONBWallet(b', ($self'balance, $self'owner, $self'master, $self'linker));
b' = __gen_write_TONBWallet(b', ($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address));
return b'.end_cell();
}
@ -303,8 +307,8 @@ cell $__gen_TONBWallet_init(cell sys', slice $master, slice $owner) {
return (mine, $__gen_TONBWallet_init(sys, $master, $owner));
}
(int, slice, slice, cell) $__gen_TONBWallet_get_wallet_data((int, slice, slice, slice) $self) impure {
var (($self'balance, $self'owner, $self'master, $self'linker)) = $self;
(int, slice, slice, cell) $__gen_TONBWallet_get_wallet_data((int, slice, slice, int, slice) $self) impure {
var (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address)) = $self;
return ($self'balance, $self'owner, $self'master, __gen_StateInit_get_code($__gen_TONBWallet_init_child(__tact_context_sys, $self'master, $self'owner)));
}
@ -314,8 +318,8 @@ _ $__gen_get_get_wallet_data() method_id(97026) {
return __gen_JettonWalletData_to_external(res);
}
(((int, slice, slice, slice)), ()) $__gen_TONBWallet_receive_TokenTransfer((int, slice, slice, slice) $self, (int, int, slice, slice, cell, int, slice) $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker) = $self;
(((int, slice, slice, int, slice)), ()) $__gen_TONBWallet_receive_TokenTransfer((int, slice, slice, int, slice) $self, (int, int, slice, slice, cell, int, slice) $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address) = $self;
var ($msg'queryId, $msg'amount, $msg'destination, $msg'responseDestination, $msg'customPayload, $msg'forwardTonAmount, $msg'forwardPayload) = $msg;
var ($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw) = __tact_context_get();
throw_unless(4429, __tact_address_eq($ctx'sender, $self'owner));
@ -329,18 +333,19 @@ _ $__gen_get_get_wallet_data() method_id(97026) {
throw_unless(16059, ($ctx'value > ((($fwdCount * $fwdFee) + (2 * 10000000)) + 10000000)));
var ($init'code, $init'data) = $__gen_TONBWallet_init_child(__tact_context_sys, $self'master, $msg'destination);
slice $walletAddress = $contractAddress(($init'code, $init'data));
$send((true, $walletAddress, 0, 64, __gen_writecell_TokenTransferInternal(($msg'queryId, $msg'amount, $self'owner, $self'owner, $msg'forwardTonAmount, $msg'forwardPayload, null())), $init'code, $init'data));
return (($self'balance, $self'owner, $self'master, $self'linker), ());
$send((true, $walletAddress, 0, 64, __gen_writecell_TokenTransferInternal(($msg'queryId, $msg'amount, $self'owner, $self'owner, $msg'forwardTonAmount, $msg'forwardPayload, null(), null())), $init'code, $init'data));
return (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address), ());
}
(((int, slice, slice, slice)), ()) $__gen_TONBWallet_receive_TokenTransferInternal((int, slice, slice, slice) $self, (int, int, slice, slice, int, slice, slice) $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker) = $self;
var ($msg'queryId, $msg'amount, $msg'from, $msg'responseAddress, $msg'forwardTonAmount, $msg'forwardPayload, $msg'setLinker) = $msg;
(((int, slice, slice, int, slice)), ()) $__gen_TONBWallet_receive_TokenTransferInternal((int, slice, slice, int, slice) $self, (int, int, slice, slice, int, slice, int, slice) $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address) = $self;
var ($msg'queryId, $msg'amount, $msg'from, $msg'responseAddress, $msg'forwardTonAmount, $msg'forwardPayload, $msg'setLinker, $msg'setLinkerAddress) = $msg;
var ($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw) = __tact_context_get();
if (null?($self'linker)) {
$self'linker = $msg'setLinker;
$self'linker_address = $msg'setLinkerAddress;
}
if ((__tact_address_neq($ctx'sender, $self'master) & __tact_address_neq($ctx'sender, $self'linker))) {
if ((__tact_address_neq($ctx'sender, $self'master) & __tact_address_neq($ctx'sender, $self'linker_address))) {
var ($sinit'code, $sinit'data) = $__gen_TONBWallet_init_child(__tact_context_sys, $self'master, $msg'from);
throw_unless(4429, __tact_address_eq($contractAddress(($sinit'code, $sinit'data)), $ctx'sender));
}
@ -358,31 +363,31 @@ _ $__gen_get_get_wallet_data() method_id(97026) {
if (((~ null?($msg'responseAddress)) & ($msgValue > 0))) {
$send((false, __tact_not_null($msg'responseAddress), $msgValue, 0, __gen_writecell_TokenExcesses(($msg'queryId)), null(), null()));
}
return (($self'balance, $self'owner, $self'master, $self'linker), ());
return (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address), ());
}
(((int, slice, slice, slice)), ()) $__gen_TONBWallet_receive_TokenBurn((int, slice, slice, slice) $self, (int, int, slice, slice) $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker) = $self;
(((int, slice, slice, int, slice)), ()) $__gen_TONBWallet_receive_TokenBurn((int, slice, slice, int, slice) $self, (int, int, slice, slice) $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address) = $self;
var ($msg'queryId, $msg'amount, $msg'owner, $msg'responseAddress) = $msg;
var ($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw) = __tact_context_get();
throw_unless(4429, ((__tact_address_eq($ctx'sender, $self'owner) | __tact_address_eq($ctx'sender, $self'master)) | __tact_address_eq($ctx'sender, $self'linker)));
throw_unless(4429, ((__tact_address_eq($ctx'sender, $self'owner) | __tact_address_eq($ctx'sender, $self'master)) | __tact_address_eq($ctx'sender, $self'linker_address)));
$self'balance = ($self'balance - $msg'amount);
throw_unless(62972, ($self'balance >= 0));
int $fwdFee = $__gen_Context_readForwardFee(($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw));
throw_unless(16059, ($ctx'value > (($fwdFee + (2 * 10000000)) + 10000000)));
throw_unless(16059, ($ctx'value > ((2 * 10000000) + 10000000)));
$send((true, $self'master, 0, 64, __gen_writecell_TokenBurnNotification(($msg'queryId, $msg'amount, $self'owner, $self'owner)), null(), null()));
return (($self'balance, $self'owner, $self'master, $self'linker), ());
return (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address), ());
}
((int, slice, slice, slice), ()) $__gen_TONBWallet_receive_bounced((int, slice, slice, slice) $self, slice $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker) = $self;
((int, slice, slice, int, slice), ()) $__gen_TONBWallet_receive_bounced((int, slice, slice, int, slice) $self, slice $msg) impure {
var ($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address) = $self;
$msg~skip_bits(32);
int $op = $msg~load_uint(32);
int $queryId = $msg~load_uint(64);
int $jettonAmount = $msg~load_coins();
throw_unless(13650, (($op == 395134233) | ($op == 2078119902)));
$self'balance = ($self'balance + $jettonAmount);
return (($self'balance, $self'owner, $self'master, $self'linker), ());
return (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address), ());
}
@ -446,5 +451,5 @@ _ supported_interfaces() method_id {
}
_ get_abi_ipfs() {
return "ipfs://QmWqpvx8PLAjtTJAa4RuwzEXeejSonT37BiA5HxjDFbLvM";
return "ipfs://QmNcnMjCZjwpaP9xLwcPNt8ziw2bt7pGUNu1PCVFvkfGtv";
}

196
sources/output/jetton_TONBWallet.code.fif

@ -181,13 +181,13 @@ PROGRAM{
}>
__gen_write_TokenTransferInternal PROCREF:<{
395134233 PUSHINT
s0 s8 XCHG2
s0 s9 XCHG2
32 STU
s1 s6 XCHG
s1 s7 XCHG
64 STU
s0 s4 XCHG2
s0 s5 XCHG2
STGRAMS
ROT
s0 s3 XCHG2
__tact_store_address INLINECALLDICT
SWAP
__tact_store_address_opt INLINECALLDICT
@ -196,6 +196,22 @@ PROGRAM{
SWAP
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
IF:<{
TRUE
SWAP
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}>ELSE<{
s2 POP
FALSE
ROT
1 STI
}>
ROT
__tact_store_address_opt INLINECALLDICT
ENDC
@ -204,7 +220,7 @@ PROGRAM{
}>
__gen_writecell_TokenTransferInternal PROCREF:<{
NEWC
7 -ROLL
8 -ROLL
__gen_write_TokenTransferInternal INLINECALLDICT
ENDC
}>
@ -225,13 +241,23 @@ PROGRAM{
LDREF
SWAP
CTOS
1 LDI
SWAP
IF:<{
257 PUSHINT
LDIX
}>ELSE<{
PUSHNULL
SWAP
}>
__tact_load_address_opt INLINECALLDICT
NIP
s1 s7 XCHG
s1 s6 XCHG
s1 s5 XCHG
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s8 XCHG
s2 s7 XCHG
s2 s6 XCHG
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}>
__gen_write_TokenNotification PROCREF:<{
1935855772 PUSHINT
@ -298,14 +324,30 @@ PROGRAM{
ENDC
}>
__gen_write_TONBWallet PROCREF:<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
SWAP
ROT
__tact_store_address INLINECALLDICT
SWAP
__tact_store_address INLINECALLDICT
NEWC
s2 PUSH
ISNULL
NOT
IF:<{
TRUE
SWAP
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}>ELSE<{
s2 POP
FALSE
ROT
1 STI
}>
ROT
__tact_store_address_opt INLINECALLDICT
ENDC
@ -322,10 +364,20 @@ PROGRAM{
LDREF
SWAP
CTOS
1 LDI
SWAP
IF:<{
257 PUSHINT
LDIX
}>ELSE<{
PUSHNULL
SWAP
}>
__tact_load_address_opt INLINECALLDICT
NIP
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}>
__gen_StateInit_get_code PROCINLINE:<{
DROP
@ -339,14 +391,14 @@ PROGRAM{
SWAP
__tact_context_sys SETGLOB
__gen_read_TONBWallet INLINECALLDICT
1 4 BLKDROP2
1 5 BLKDROP2
}>
__gen_store_TONBWallet PROCREF:<{
NEWC
__tact_context_sys GETGLOB
SWAP
STREF
4 -ROLL
5 -ROLL
__gen_write_TONBWallet INLINECALLDICT
ENDC
c4 POP
@ -469,13 +521,14 @@ PROGRAM{
1 RSHIFT#
}>
$__gen_TONBWallet_init PROC:<{
PUSHNULL
PUSHNULL
0 PUSHINT
s0 s4 XCHG
s0 s5 XCHG
NEWC
STREF
s0 s4 XCHG
s3 s3 XCHG2
s0 s5 XCHG
s4 s4 s4 XCHG3
__gen_write_TONBWallet INLINECALLDICT
ENDC
}>
@ -499,7 +552,7 @@ PROGRAM{
$__gen_TONBWallet_init CALLDICT
}>
$__gen_TONBWallet_get_wallet_data PROC:<{
DROP
2DROP
__tact_context_sys GETGLOB
s1 s2 PUSH2
$__gen_TONBWallet_init_child CALLDICT
@ -514,17 +567,17 @@ PROGRAM{
2 2 BLKDROP2
__tact_context_get INLINECALLDICT
4429 PUSHINT
s3 s12 PUSH2
s3 s13 PUSH2
__tact_address_eq INLINECALLDICT
THROWANYIFNOT
s12 s7 XCPU
s13 s7 XCPU
SUB
62972 PUSHINT
OVER
-1 GTINT
THROWANYIFNOT
s3 s3 s0 XCHG3
s3 s12 PUXC
s3 s13 PUXC
$__gen_Context_readForwardFee CALLDICT
1 PUSHINT
s4 PUSH
@ -544,7 +597,7 @@ PROGRAM{
GREATER
THROWANYIFNOT
__tact_context_sys GETGLOB
s0 s7 s3 XCPUXC
s0 s8 s3 XCPUXC
$__gen_TONBWallet_init_child CALLDICT
2DUP
$contractAddress CALLDICT
@ -553,49 +606,56 @@ PROGRAM{
0 PUSHINT
64 PUSHINT
PUSHNULL
s13 PUSH
s3 s14 XCPU
s0 s3 XCHG
s9 s10 s9 XCHG3
PUSHNULL
s15 PUSH
s0 s4 XCHG
16 s() PUSH
s0 s4 XCHG
s3 s10 XCHG
s11 s10 s11 XCHG3
__gen_writecell_TokenTransferInternal INLINECALLDICT
s5 s6 XCHG
s3 s4 XCHG
-ROT
$send CALLDICT
}>
$__gen_TONBWallet_receive_TokenTransferInternal PROC:<{
__tact_context_get INLINECALLDICT
s11 PUSH
s13 PUSH
ISNULL
IF:<{
s11 POP
s3 s10 XCHG
s12 POP
s12 POP
s3 s11 XCHG
s2 s10 XCHG
}>ELSE<{
s4 POP
s4 POP
}>
s1 s11 PUSH2
s0 s12 PUSH2
__tact_address_neq INLINECALLDICT
s2 s11 PUSH2
s1 s11 PUSH2
__tact_address_neq INLINECALLDICT
AND
IF:<{
__tact_context_sys GETGLOB
s12 s8 PUSH2
s13 s8 PUSH2
$__gen_TONBWallet_init_child CALLDICT
SWAP
4429 PUSHINT
s0 s2 XCHG
$contractAddress CALLDICT
s3 PUSH
s2 PUSH
__tact_address_eq INLINECALLDICT
THROWANYIFNOT
}>
s13 s8 XCPU
s14 s8 XCPU
ADD
62972 PUSHINT
OVER
-1 GTINT
THROWANYIFNOT
s13 PUSH
s3 PUSH
__tact_my_balance INLINECALLDICT
OVER
SUB
@ -609,10 +669,12 @@ PROGRAM{
s6 PUSH
0 GTINT
IF:<{
s14 s4 XCHG2
s3 s1 s15 XCHG3
s4 s2 XCHG2
$__gen_Context_readForwardFee CALLDICT
s3 s(-1) PUXC
ADD
s1 s12 XCHG
SUB
FALSE
0 PUSHINT
@ -620,20 +682,20 @@ PROGRAM{
s8 s1 s3 XCHG3
s7 s4 XCHG2
__gen_writecell_TokenNotification INLINECALLDICT
s9 PUSH
s10 PUSH
s4 s6 XCHG
s3 s1 s3 XCHG3
s5 s5 XCHG2
PUSHNULL
PUSHNULL
$send CALLDICT
s0 s6 XCHG2
s0 s7 XCHG2
}>ELSE<{
s7 s14 XCHG
s7 s15 XCHG
s8 s9 XCHG2
8 BLKDROP
}>
s6 PUSH
s7 PUSH
ISNULL
NOT
s2 PUSH
@ -641,19 +703,19 @@ PROGRAM{
AND
IF:<{
FALSE
s0 s7 XCHG
s0 s8 XCHG
__tact_not_null CALLDICT
0 PUSHINT
s0 s4 XCHG
__gen_writecell_TokenExcesses INLINECALLDICT
s4 s8 XCHG
s4 s9 XCHG
s3 s3 s0 XCHG3
s1 s8 XCHG
s1 s9 XCHG
PUSHNULL
PUSHNULL
$send CALLDICT
}>ELSE<{
s6 POP
s7 POP
2DROP
}>
}>
@ -661,40 +723,37 @@ PROGRAM{
2DROP
__tact_context_get INLINECALLDICT
4429 PUSHINT
s3 s9 PUSH2
s3 s10 PUSH2
__tact_address_eq INLINECALLDICT
s4 s9 PUSH2
s4 s10 PUSH2
__tact_address_eq INLINECALLDICT
OR
s4 s8 PUSH2
__tact_address_eq INLINECALLDICT
OR
THROWANYIFNOT
s9 s4 XCPU
s10 s4 XCPU
SUB
62972 PUSHINT
OVER
-1 GTINT
THROWANYIFNOT
s3 s3 s0 XCHG3
s3 s9 PUXC
s3 s10 PUXC
$__gen_Context_readForwardFee CALLDICT
DROP
16059 PUSHINT
SWAP
20000000 PUSHINT
ADD
10000000 PUSHINT
ADD
s1 s2 XCHG
30000000 PUSHINT
GREATER
THROWANYIFNOT
TRUE
0 PUSHINT
s0 s3 XCHG
64 PUSHINT
s3 s7 s7 XCPU2
s3 s8 s8 XCPU2
__gen_writecell_TokenBurnNotification INLINECALLDICT
s3 s0 s5 XC2PU
s3 s0 s6 XC2PU
s3 s3 XCHG2
PUSHNULL
PUSHNULL
@ -719,9 +778,9 @@ PROGRAM{
OR
s1 s2 XCHG
THROWANYIFNOT
s1 s4 XCHG
s1 s5 XCHG
ADD
s0 s3 XCHG
s0 s4 XCHG
}>
recv_internal PROC:<{
0 PUSHINT
@ -755,7 +814,7 @@ PROGRAM{
IFJMP:<{
DROP
__gen_load_TONBWallet INLINECALLDICT
4 ROLL
5 ROLL
$__gen_TONBWallet_receive_bounced CALLDICT
__gen_store_TONBWallet INLINECALLDICT
}>
@ -765,9 +824,10 @@ PROGRAM{
IFJMP:<{
DROP
__gen_load_TONBWallet INLINECALLDICT
s0 s4 XCHG
s0 s5 XCHG
__gen_read_TokenTransfer INLINECALLDICT
s7 POP
s10 s11 XCHG
s9 s10 XCHG
s8 s9 XCHG
s7 s8 XCHG
@ -781,13 +841,14 @@ PROGRAM{
IFJMP:<{
DROP
__gen_load_TONBWallet INLINECALLDICT
s0 s4 XCHG
s0 s5 XCHG
__gen_read_TokenTransferInternal INLINECALLDICT
s7 POP
s8 POP
s11 s12 XCHG
s10 s11 XCHG
s9 s10 XCHG
s8 s9 XCHG
s7 s8 XCHG
6 ROLL
7 ROLL
$__gen_TONBWallet_receive_TokenTransferInternal CALLDICT
__gen_store_TONBWallet INLINECALLDICT
}>
@ -795,9 +856,10 @@ PROGRAM{
EQUAL
IFJMP:<{
__gen_load_TONBWallet INLINECALLDICT
s0 s4 XCHG
s0 s5 XCHG
__gen_read_TokenBurn INLINECALLDICT
s4 POP
s7 s8 XCHG
s6 s7 XCHG
s5 s6 XCHG
s4 s5 XCHG
@ -814,6 +876,6 @@ PROGRAM{
209778528950190195973528115415557644819 PUSHINT
}>
get_abi_ipfs PROC:<{
x{697066733a2f2f516d577170767838504c416a74544a4161345275777a455865656a536f6e5433374269413548786a4446624c764d} PUSHSLICE
x{697066733a2f2f516d4e636e4d6a435a6a7770615039784c7763504e74387a6977326274377047554e753150435646766b66477476} PUSHSLICE
}>
}END>c

388
sources/output/jetton_TONBWallet.code.rev.fif

@ -52,6 +52,17 @@ SETCP0
LDREF
s0 s1 XCHG
CTOS
1 LDI
s0 s1 XCHG
<{
257 PUSHINT
LDI
}> PUSHCONT
<{
PUSHNULL
s0 s1 XCHG
}> PUSHCONT
IFELSE
LDMSGADDR
s1 PUSH
2 PLDU
@ -65,28 +76,47 @@ SETCP0
}> PUSHCONT
IFELSE
s1 POP
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}> CALLREF
1 4 BLKDROP2
1 5 BLKDROP2
}> CALLREF
1 4 BLKSWAP
1 5 BLKSWAP
42 CALLDICT
<{
NEWC
2 GETGLOBVAR
s0 s1 XCHG
STREF
4 1 BLKSWAP
5 1 BLKSWAP
<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
s0 s1 XCHG
ROT
STSLICER
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -132,6 +162,17 @@ SETCP0
LDREF
s0 s1 XCHG
CTOS
1 LDI
s0 s1 XCHG
<{
257 PUSHINT
LDI
}> PUSHCONT
<{
PUSHNULL
s0 s1 XCHG
}> PUSHCONT
IFELSE
LDMSGADDR
s1 PUSH
2 PLDU
@ -145,12 +186,13 @@ SETCP0
}> PUSHCONT
IFELSE
s1 POP
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}> CALLREF
1 4 BLKDROP2
1 5 BLKDROP2
}> CALLREF
s0 s4 XCHG
s0 s5 XCHG
<{
32 LDU
s0 s1 XCHG
@ -193,6 +235,7 @@ SETCP0
s3 s3 s0 XCHG3
}> CALLREF
s7 POP
s10 s11 XCHG
s9 s10 XCHG
s8 s9 XCHG
s7 s8 XCHG
@ -203,16 +246,34 @@ SETCP0
2 GETGLOBVAR
s0 s1 XCHG
STREF
4 1 BLKSWAP
5 1 BLKSWAP
<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
s0 s1 XCHG
ROT
STSLICER
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -257,6 +318,17 @@ SETCP0
LDREF
s0 s1 XCHG
CTOS
1 LDI
s0 s1 XCHG
<{
257 PUSHINT
LDI
}> PUSHCONT
<{
PUSHNULL
s0 s1 XCHG
}> PUSHCONT
IFELSE
LDMSGADDR
s1 PUSH
2 PLDU
@ -270,12 +342,13 @@ SETCP0
}> PUSHCONT
IFELSE
s1 POP
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}> CALLREF
1 4 BLKDROP2
1 5 BLKDROP2
}> CALLREF
s0 s4 XCHG
s0 s5 XCHG
<{
32 LDU
s0 s1 XCHG
@ -305,6 +378,17 @@ SETCP0
LDREF
s0 s1 XCHG
CTOS
1 LDI
s0 s1 XCHG
<{
257 PUSHINT
LDI
}> PUSHCONT
<{
PUSHNULL
s0 s1 XCHG
}> PUSHCONT
IFELSE
LDMSGADDR
s1 PUSH
2 PLDU
@ -318,33 +402,53 @@ SETCP0
}> PUSHCONT
IFELSE
s1 POP
s1 s7 XCHG
s1 s6 XCHG
s1 s5 XCHG
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s8 XCHG
s2 s7 XCHG
s2 s6 XCHG
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}> CALLREF
s7 POP
s8 POP
s11 s12 XCHG
s10 s11 XCHG
s9 s10 XCHG
s8 s9 XCHG
s7 s8 XCHG
1 6 BLKSWAP
1 7 BLKSWAP
40 CALLDICT
<{
NEWC
2 GETGLOBVAR
s0 s1 XCHG
STREF
4 1 BLKSWAP
5 1 BLKSWAP
<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
s0 s1 XCHG
ROT
STSLICER
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -388,6 +492,17 @@ SETCP0
LDREF
s0 s1 XCHG
CTOS
1 LDI
s0 s1 XCHG
<{
257 PUSHINT
LDI
}> PUSHCONT
<{
PUSHNULL
s0 s1 XCHG
}> PUSHCONT
IFELSE
LDMSGADDR
s1 PUSH
2 PLDU
@ -401,12 +516,13 @@ SETCP0
}> PUSHCONT
IFELSE
s1 POP
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}> CALLREF
1 4 BLKDROP2
1 5 BLKDROP2
}> CALLREF
s0 s4 XCHG
s0 s5 XCHG
<{
32 LDU
s0 s1 XCHG
@ -434,6 +550,7 @@ SETCP0
s3 s3 s0 XCHG3
}> CALLREF
s4 POP
s7 s8 XCHG
s6 s7 XCHG
s5 s6 XCHG
s4 s5 XCHG
@ -444,16 +561,34 @@ SETCP0
2 GETGLOBVAR
s0 s1 XCHG
STREF
4 1 BLKSWAP
5 1 BLKSWAP
<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
s0 s1 XCHG
ROT
STSLICER
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -648,22 +783,41 @@ SETCP0
1 RSHIFT
36:
PUSHNULL
PUSHNULL
0 PUSHINT
s0 s4 XCHG
s0 s5 XCHG
NEWC
STREF
s0 s4 XCHG
s3 s3 XCHG2
s0 s5 XCHG
s4 s4 s4 XCHG3
<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
s0 s1 XCHG
ROT
STSLICER
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -709,7 +863,7 @@ SETCP0
36 CALLDICT
38:
s0 POP
2DROP
2 GETGLOBVAR
s1 s2 PUSH2
37 CALLDICT
@ -720,17 +874,17 @@ SETCP0
1 GETGLOBVAR
4 UNTUPLE
4429 PUSHINT
s3 s12 PUSH2
s3 s13 PUSH2
SDEQ
THROWANYIFNOT
s12 s7 XCPU
s13 s7 XCPU
SUB
62972 PUSHINT
s1 PUSH
-1 GTINT
THROWANYIFNOT
s3 s3 s0 XCHG3
s3 s12 PUXC
s3 s13 PUXC
35 CALLDICT
1 PUSHINT
s4 PUSH
@ -751,7 +905,7 @@ SETCP0
GREATER
THROWANYIFNOT
2 GETGLOBVAR
0 7 3 XCPUXC
0 8 3 XCPUXC
37 CALLDICT
2DUP
33 CALLDICT
@ -760,22 +914,25 @@ SETCP0
0 PUSHINT
64 PUSHINT
PUSHNULL
s13 PUSH
s3 s14 XCPU
s0 s3 XCHG
s9 s10 s9 XCHG3
PUSHNULL
s15 PUSH
s0 s4 XCHG
s16 PUSH
s0 s4 XCHG
s3 s10 XCHG
s11 s10 s11 XCHG3
<{
NEWC
7 1 BLKSWAP
8 1 BLKSWAP
<{
395134233 PUSHINT
s0 s8 XCHG2
s0 s9 XCHG2
32 STU
s1 s6 XCHG
s1 s7 XCHG
64 STU
s0 s4 XCHG2
s0 s5 XCHG2
STGRAMS
ROT
s0 s3 XCHG2
STSLICER
s0 s1 XCHG
s0 PUSH
@ -795,6 +952,24 @@ SETCP0
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL
@ -815,49 +990,53 @@ SETCP0
ENDC
}> CALLREF
s5 s6 XCHG
s3 s4 XCHG
ROTREV
34 CALLDICT
40:
1 GETGLOBVAR
4 UNTUPLE
s11 PUSH
s13 PUSH
ISNULL
<{
s11 POP
s3 s10 XCHG
s12 POP
s12 POP
s3 s11 XCHG
s2 s10 XCHG
}> PUSHCONT
<{
s4 POP
s4 POP
}> PUSHCONT
IFELSE
s1 s11 PUSH2
s0 s12 PUSH2
SDEQ
NOT
s2 s11 PUSH2
s1 s11 PUSH2
SDEQ
NOT
AND
<{
2 GETGLOBVAR
s12 s8 PUSH2
s13 s8 PUSH2
37 CALLDICT
s0 s1 XCHG
4429 PUSHINT
s0 s2 XCHG
33 CALLDICT
s3 PUSH
s2 PUSH
SDEQ
THROWANYIFNOT
}> PUSHCONT
IF
s13 s8 XCPU
s14 s8 XCPU
ADD
62972 PUSHINT
s1 PUSH
-1 GTINT
THROWANYIFNOT
s13 PUSH
s3 PUSH
BALANCE
0 INDEX
s1 PUSH
@ -872,10 +1051,17 @@ SETCP0
s6 PUSH
0 GTINT
<{
s14 s4 XCHG2
s7 s15 XCHG
s8 s9 XCHG2
8 BLKDROP
}> PUSHCONT
<{
s3 s1 s15 XCHG3
s4 s2 XCHG2
35 CALLDICT
s3 s-1 PUXC
ADD
s1 s12 XCHG
SUB
0 PUSHINT
0 PUSHINT
@ -900,30 +1086,28 @@ SETCP0
}> CALLREF
ENDC
}> CALLREF
s9 PUSH
s10 PUSH
s4 s6 XCHG
s3 s1 s3 XCHG3
s5 s5 XCHG2
PUSHNULL
PUSHNULL
34 CALLDICT
s0 s6 XCHG2
}> PUSHCONT
<{
s7 s14 XCHG
s8 s9 XCHG2
8 BLKDROP
}> PUSHCONT
IFELSE
s6 PUSH
s0 s7 XCHG2
}> IFREFELSE
s7 PUSH
ISNULL
NOT
s2 PUSH
0 GTINT
AND
<{
s7 POP
2DROP
}> PUSHCONT
<{
0 PUSHINT
s0 s7 XCHG
s0 s8 XCHG
2 CALLDICT
0 PUSHINT
s0 s4 XCHG
@ -938,56 +1122,48 @@ SETCP0
}> CALLREF
ENDC
}> CALLREF
s4 s8 XCHG
s4 s9 XCHG
s3 s3 s0 XCHG3
s1 s8 XCHG
s1 s9 XCHG
PUSHNULL
PUSHNULL
34 CALLDICT
}> PUSHCONT
<{
s6 POP
2DROP
}> PUSHCONT
IFELSE
}> IFREFELSE
41:
2DROP
1 GETGLOBVAR
4 UNTUPLE
4429 PUSHINT
s3 s9 PUSH2
s3 s10 PUSH2
SDEQ
s4 s9 PUSH2
s4 s10 PUSH2
SDEQ
OR
s4 s8 PUSH2
SDEQ
OR
THROWANYIFNOT
s9 s4 XCPU
s10 s4 XCPU
SUB
62972 PUSHINT
s1 PUSH
-1 GTINT
THROWANYIFNOT
s3 s3 s0 XCHG3
s3 s9 PUXC
s3 s10 PUXC
35 CALLDICT
s0 POP
16059 PUSHINT
s0 s1 XCHG
20000000 PUSHINT
ADD
10000000 PUSHINT
ADD
s1 s2 XCHG
30000000 PUSHINT
GREATER
THROWANYIFNOT
-1 PUSHINT
0 PUSHINT
s0 s3 XCHG
64 PUSHINT
3 7 7 XCPU2
3 8 8 XCPU2
<{
NEWC
4 1 BLKSWAP
@ -1017,7 +1193,7 @@ SETCP0
}> CALLREF
ENDC
}> CALLREF
3 0 5 XC2PU
3 0 6 XC2PU
s3 s3 XCHG2
PUSHNULL
PUSHNULL
@ -1042,9 +1218,9 @@ SETCP0
OR
s1 s2 XCHG
THROWANYIFNOT
s1 s4 XCHG
s1 s5 XCHG
ADD
s0 s3 XCHG
s0 s4 XCHG
get_wallet_data:
<{
@ -1065,6 +1241,17 @@ SETCP0
LDREF
s0 s1 XCHG
CTOS
1 LDI
s0 s1 XCHG
<{
257 PUSHINT
LDI
}> PUSHCONT
<{
PUSHNULL
s0 s1 XCHG
}> PUSHCONT
IFELSE
LDMSGADDR
s1 PUSH
2 PLDU
@ -1078,10 +1265,11 @@ SETCP0
}> PUSHCONT
IFELSE
s1 POP
s1 s4 XCHG
s3 s3 s0 XCHG3
s2 s5 XCHG
s2 s4 XCHG
s2 s3 XCHG
}> CALLREF
1 4 BLKDROP2
1 5 BLKDROP2
}> CALLREF
38 CALLDICT
30 CALLDICT

BIN
sources/output/jetton_TONBWallet.init.boc

Binary file not shown.

11
sources/output/jetton_TONBWallet.init.fc

@ -17,25 +17,26 @@ builder __tact_store_address_opt(builder b, slice address) inline {
}
}
builder __gen_write_TONBWallet(builder build_0, (int, slice, slice, slice) v) inline_ref {
var (v'balance, v'owner, v'master, v'linker) = v;
builder __gen_write_TONBWallet(builder build_0, (int, slice, slice, int, slice) v) inline_ref {
var (v'balance, v'owner, v'master, v'linker, v'linker_address) = v;
build_0 = build_0.store_int(v'balance, 257);
build_0 = __tact_store_address(build_0, v'owner);
build_0 = __tact_store_address(build_0, v'master);
var build_1 = begin_cell();
build_1 = __tact_store_address_opt(build_1, v'linker);
build_1 = ~ null?(v'linker) ? build_1.store_int(true, 1).store_int(v'linker, 257) : build_1.store_int(false, 1);
build_1 = __tact_store_address_opt(build_1, v'linker_address);
build_0 = store_ref(build_0, build_1.end_cell());
return build_0;
}
cell $__gen_TONBWallet_init(cell sys', slice $master, slice $owner) {
var (($self'balance, $self'owner, $self'master, $self'linker)) = (null(), null(), null(), null());
var (($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address)) = (null(), null(), null(), null(), null());
$self'balance = 0;
$self'owner = $owner;
$self'master = $master;
var b' = begin_cell();
b' = b'.store_ref(sys');
b' = __gen_write_TONBWallet(b', ($self'balance, $self'owner, $self'master, $self'linker));
b' = __gen_write_TONBWallet(b', ($self'balance, $self'owner, $self'master, $self'linker, $self'linker_address));
return b'.end_cell();
}

27
sources/output/jetton_TONBWallet.init.fif

@ -28,14 +28,30 @@ PROGRAM{
}>
}>
__gen_write_TONBWallet PROCREF:<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
SWAP
ROT
__tact_store_address INLINECALLDICT
SWAP
__tact_store_address INLINECALLDICT
NEWC
s2 PUSH
ISNULL
NOT
IF:<{
TRUE
SWAP
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}>ELSE<{
s2 POP
FALSE
ROT
1 STI
}>
ROT
__tact_store_address_opt INLINECALLDICT
ENDC
@ -43,13 +59,14 @@ PROGRAM{
STREF
}>
$__gen_TONBWallet_init PROC:<{
PUSHNULL
PUSHNULL
0 PUSHINT
s0 s4 XCHG
s0 s5 XCHG
NEWC
STREF
s0 s4 XCHG
s3 s3 XCHG2
s0 s5 XCHG
s4 s4 s4 XCHG3
__gen_write_TONBWallet INLINECALLDICT
ENDC
}>

29
sources/output/jetton_TONBWallet.init.rev.fif

@ -3,22 +3,41 @@ SETCP0
recv_internal:
5:
PUSHNULL
PUSHNULL
0 PUSHINT
s0 s4 XCHG
s0 s5 XCHG
NEWC
STREF
s0 s4 XCHG
s3 s3 XCHG2
s0 s5 XCHG
s4 s4 s4 XCHG3
<{
s3 s4 XCHG2
s4 s5 XCHG2
257 PUSHINT
STIX
s0 s1 XCHG
ROT
STSLICER
s0 s1 XCHG
STSLICER
NEWC
s2 PUSH
ISNULL
NOT
<{
-1 PUSHINT
s0 s1 XCHG
1 STI
s1 s2 XCHG
257 PUSHINT
STIX
}> PUSHCONT
<{
s2 POP
0 PUSHINT
ROT
1 STI
}> PUSHCONT
IFELSE
ROT
s0 PUSH
ISNULL

6
sources/output/jetton_TONBWallet.md

@ -1,6 +1,6 @@
# TACT Compilation Report
Contract: TONBWallet
BOC Size: 1422 bytes
BOC Size: 1514 bytes
# Types
Total Types: 18
@ -22,8 +22,8 @@ TLB: `token_transfer#0f8a7ea5 queryId:uint64 amount:coins destination:address re
Signature: `TokenTransfer{queryId:uint64,amount:coins,destination:address,responseDestination:Maybe address,customPayload:Maybe ^cell,forwardTonAmount:coins,forwardPayload:remainder<slice>}`
## TokenTransferInternal
TLB: `token_transfer_internal#178d4519 queryId:uint64 amount:coins from:address responseAddress:Maybe address forwardTonAmount:coins forwardPayload:remainder<slice> setLinker:Maybe address = TokenTransferInternal`
Signature: `TokenTransferInternal{queryId:uint64,amount:coins,from:address,responseAddress:Maybe address,forwardTonAmount:coins,forwardPayload:remainder<slice>,setLinker:Maybe address}`
TLB: `token_transfer_internal#178d4519 queryId:uint64 amount:coins from:address responseAddress:Maybe address forwardTonAmount:coins forwardPayload:remainder<slice> setLinker:Maybe int257 setLinkerAddress:Maybe address = TokenTransferInternal`
Signature: `TokenTransferInternal{queryId:uint64,amount:coins,from:address,responseAddress:Maybe address,forwardTonAmount:coins,forwardPayload:remainder<slice>,setLinker:Maybe int257,setLinkerAddress:Maybe address}`
## TokenNotification
TLB: `token_notification#7362d09c queryId:uint64 amount:coins from:address forwardPayload:remainder<slice> = TokenNotification`

2
sources/output/jetton_TONBWallet.pkg

File diff suppressed because one or more lines are too long

25
sources/output/jetton_TONBWallet.ts

@ -247,7 +247,8 @@ export type TokenTransferInternal = {
responseAddress: Address | null;
forwardTonAmount: bigint;
forwardPayload: Cell;
setLinker: Address | null;
setLinker: bigint | null;
setLinkerAddress: Address | null;
}
export function storeTokenTransferInternal(src: TokenTransferInternal) {
@ -261,7 +262,8 @@ export function storeTokenTransferInternal(src: TokenTransferInternal) {
b_0.storeCoins(src.forwardTonAmount);
b_0.storeBuilder(src.forwardPayload.asBuilder());
let b_1 = new Builder();
b_1.storeAddress(src.setLinker);
if (src.setLinker !== null && src.setLinker !== undefined) { b_1.storeBit(true).storeInt(src.setLinker, 257); } else { b_1.storeBit(false); }
b_1.storeAddress(src.setLinkerAddress);
b_0.storeRef(b_1.endCell());
};
}
@ -276,8 +278,9 @@ export function loadTokenTransferInternal(slice: Slice) {
let _forwardTonAmount = sc_0.loadCoins();
let _forwardPayload = sc_0.asCell();
let sc_1 = sc_0.loadRef().beginParse();
let _setLinker = sc_1.loadMaybeAddress();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker };
let _setLinker = sc_1.loadBit() ? sc_1.loadIntBig(257) : null;
let _setLinkerAddress = sc_1.loadMaybeAddress();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker, setLinkerAddress: _setLinkerAddress };
}
function loadTupleTokenTransferInternal(source: TupleReader) {
@ -287,8 +290,9 @@ function loadTupleTokenTransferInternal(source: TupleReader) {
let _responseAddress = source.readAddressOpt();
let _forwardTonAmount = source.readBigNumber();
let _forwardPayload = source.readCell();
let _setLinker = source.readAddressOpt();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker };
let _setLinker = source.readBigNumberOpt();
let _setLinkerAddress = source.readAddressOpt();
return { $$type: 'TokenTransferInternal' as const, queryId: _queryId, amount: _amount, from: _from, responseAddress: _responseAddress, forwardTonAmount: _forwardTonAmount, forwardPayload: _forwardPayload, setLinker: _setLinker, setLinkerAddress: _setLinkerAddress };
}
function storeTupleTokenTransferInternal(source: TokenTransferInternal) {
@ -299,7 +303,8 @@ function storeTupleTokenTransferInternal(source: TokenTransferInternal) {
builder.writeAddress(source.responseAddress);
builder.writeNumber(source.forwardTonAmount);
builder.writeSlice(source.forwardPayload);
builder.writeAddress(source.setLinker);
builder.writeNumber(source.setLinker);
builder.writeAddress(source.setLinkerAddress);
return builder.build();
}
@ -959,9 +964,9 @@ function dictValueParserWithdraw(): DictionaryValue<Withdraw> {
}
}
async function TONBWallet_init(master: Address, owner: Address) {
const __init = 'te6ccgEBBwEAUAABFP8A9KQT9LzyyAsBAgFiAgMCAs0EBQAJoUrd4AsAAdQBF2W1wBMjMBFAz2zzJgYAPFA0gQEBzwABzxYBzxbIWCBulTBwAcsBks8W4skBzA==';
const __code = 'te6ccgECMwEABYIAART/APSkE/S88sgLAQIBYgIDAgLKBgcCASAEBQERv9gW2eeBN4D0EQBxvd6ME4LnYerpZXPY9CdhzrJUKNs0E4TusalpWyPlmRadeW/vixHME4TujwAfLZsB5P5B1ZLNZRCcAgEgCAkCAUgVFgIBYgoLAAOnQASJRwIddJwh+VMCDXCx/eAtDTAwFxsMABkX+RcOIB+kAiUGZvBPhhAo8JMNs8VQPwKts84CCCEA+KfqW64wIgghAXjUUZuoERMMDQALQgbvLQgIAyYw2zwE2zw3EJoQiRB4VQXwJ9s8EQ4TBDqPkzDbPATbPDcQmhCJEHhVBfAo2zzgghBZXwe8uhEPExAAbNMfAYIQD4p+pbry4IHTP/oA+kABAfpAIdcLAcMAkQGSMW3iAdIAAZHUkm0B4voAUWYWFRRDMAB+0x8BghAXjUUZuvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeIB+gAg1AHQ+kAh1wsBwwCRAZIxbeIxFxYVFEMwAzKPkts8BNs8NBBnEFYQRVUC8CnbPOAw8sCCERITARbtRNDUAfhi2zxsFBQATNMfAYIQWV8HvLry4IHTP/oA+kABAfpAIdcLAcMAkQGSMW3iFEMwARjI+EIBzFUw2zzJ7VQjAESBAQHXAPpAAQH6QAEB1AHQ+kAh1wsBwwCRAZIxbeIxFEMwAgEgFxgCAUgoKQIBIBkaAgEgHyAAS1cFnIcAHLAXMBywFwAcsAEszMyfkAyHIBywFwAcsAEsoHy//J0IAgEgGxwC9zIcQHKAVAHAcoAcAHKAlAFzxZQA/oCcAHKaCNusyVus7GORn8BygDIcAHKAHABygAkbrOafwHKAATwAlAEzJY0A3ABygDiJG6zmn8BygAE8AJQBMyWNANwAcoA4nABygACfwHKAALJWMyXMzMBcAHKAOIhbrPjD8kB+wCAdHgAlGwx+gAxcdch+gAx+gAwpwOrAIAASfwHKAAHwAgHMAAoxcAHKAAIBICEiAgEgJCUBFxtcATIzARQM9s8yYCMATQC0PQEMG0BgWCEAYAQ9A9vofLghwGBYIQiAoAQ9BfI9ADJQAPwJIAA8UDSBAQHPAAHPFgHPFshYIG6VMHABywGSzxbiyQHMABEMPhCUxLwJTCABuRsIvhBbySBEU1TPMcF8vRRx6GCAPX8IcL/8vRDMFI98CNxJMIAkjBy3oE+uwKoggkxLQCgggiYloCgErzy9PhCVCB08CVc8CF/UHZwgEBtLVE+A0mp2zwQVlnwIoCYBDMhVYNs8yScAcIIQF41FGVAIyx8Wyz9QBPoCWM8WASBulTBwAcsBks8W4gH6AgHPFshYIG6VMHABywGSzxbiyQHMAgEgKisAT0gCDXIdMf0z8x+gAwgTVSIoIQF41FGboDghB73ZfeuhOxEvL0FKADgC9z4QW8kK26TOxA6kTTiUxvHBbNTK8cFs7COEvhCU8jwJQGBEU0C8CEjxwXy9N5R2KCCAPX8IcL/8vQt+CdvECGhggiYloBmtgihggiYloCgoSbCAI6eUOTwI1IwoKFwcChIE1B02zwpEEZDE1BVbW3wIlAGlhB+UIlfCOKAsLQGjFv4QW8kgRFNUznHBVNJxwWxU0jHBbHy9FGUoYIA9fwhwv/y9EMwUjrwI4E+uwGCCTEtAKCCCJiWgKASvPL0f3ADgEBUM3fbPFQTBVAzbW3wIoDEBDMhVMNs8yS4BPCZusyLCALCOkXAH8AJwBNs8EEhDMBhtbfAikjZb4i8ALIIQc2LQnFAFyx8Tyz8B+gIBzxYBzxYBCsgB2zzJMAAWghDVMnbbWMsfyz8BDMhVMNs8yTIAQIIQe92X3lAFyx8Tyz8B+gIBzxYBIG6VMHABywGSzxbi';
const __system = 'te6cckECNQEABYwAAQHAAQEFoMEJAgEU/wD0pBP0vPLICwMCAWIHBAIBIAYFAHG93owTgudh6ullc9j0J2HOslQo2zQThO6xqWlbI+WZFp15b++LEcwThO6PAB8tmwHk/kHVks1lEJwBEb/YFtnngTeA9DMCAsomCAIBSBUJAgFICwoAT0gCDXIdMf0z8x+gAwgTVSIoIQF41FGboDghB73ZfeuhOxEvL0FKADgCASAPDAGjFv4QW8kgRFNUznHBVNJxwWxU0jHBbHy9FGUoYIA9fwhwv/y9EMwUjrwI4E+uwGCCTEtAKCCCJiWgKASvPL0f3ADgEBUM3fbPFQTBVAzbW3wIoA0BDMhVMNs8yQ4AQIIQe92X3lAFyx8Tyz8B+gIBzxYBIG6VMHABywGSzxbiAvc+EFvJCtukzsQOpE04lMbxwWzUyvHBbOwjhL4QlPI8CUBgRFNAvAhI8cF8vTeUdigggD1/CHC//L0LfgnbxAhoYIImJaAZrYIoYIImJaAoKEmwgCOnlDk8CNSMKChcHAoSBNQdNs8KRBGQxNQVW1t8CJQBpYQflCJXwjigExABPCZusyLCALCOkXAH8AJwBNs8EEhDMBhtbfAikjZb4hEBCsgB2zzJEgAWghDVMnbbWMsfyz8BDMhVMNs8yRQALIIQc2LQnFAFyx8Tyz8B+gIBzxYBzxYCASAfFgIBIBwXAgEgGxgBuRsIvhBbySBEU1TPMcF8vRRx6GCAPX8IcL/8vRDMFI98CNxJMIAkjBy3oE+uwKoggkxLQCgggiYloCgErzy9PhCVCB08CVc8CF/UHZwgEBtLVE+A0mp2zwQVlnwIoBkBDMhVYNs8yRoAcIIQF41FGVAIyx8Wyz9QBPoCWM8WASBulTBwAcsBks8W4gH6AgHPFshYIG6VMHABywGSzxbiyQHMABEMPhCUxLwJTCACASAeHQBNALQ9AQwbQGBYIQBgBD0D2+h8uCHAYFghCICgBD0F8j0AMlAA/AkgARcbXAEyMwEUDPbPMmAyAgEgJSACASAiIQAlGwx+gAxcdch+gAx+gAwpwOrAIAL3MhxAcoBUAcBygBwAcoCUAXPFlAD+gJwAcpoI26zJW6zsY5GfwHKAMhwAcoAcAHKACRus5p/AcoABPACUATMljQDcAHKAOIkbrOafwHKAATwAlAEzJY0A3ABygDicAHKAAJ/AcoAAslYzJczMwFwAcoA4iFus+MPyQH7AICQjAAoxcAHKAAASfwHKAAHwAgHMAEtXBZyHABywFzAcsBcAHLABLMzMn5AMhyAcsBcAHLABLKB8v/ydCAIBICgnAAOnQAIBYiopAAtCBu8tCAgEiUcCHXScIflTAg1wsf3gLQ0wMBcbDAAZF/kXDiAfpAIlBmbwT4YQKPCTDbPFUD8CrbPOAgghAPin6luuMCIIIQF41FGbqDMxLysEOo+TMNs8BNs8NxCaEIkQeFUF8CjbPOCCEFlfB7y6My4xLAMyj5LbPATbPDQQZxBWEEVVAvAp2zzgMPLAgjMtMQBM0x8BghBZXwe8uvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeIUQzAAftMfAYIQF41FGbry4IHTP/oA+kABAfpAIdcLAcMAkQGSMW3iAfoAINQB0PpAIdcLAcMAkQGSMW3iMRcWFRRDMAMmMNs8BNs8NxCaEIkQeFUF8CfbPDMwMQBs0x8BghAPin6luvLggdM/+gD6QAEB+kAh1wsBwwCRAZIxbeIB0gABkdSSbQHi+gBRZhYVFEMwARjI+EIBzFUw2zzJ7VQyADxQNIEBAc8AAc8WAc8WyFggbpUwcAHLAZLPFuLJAcwBFu1E0NQB+GLbPGwUNABEgQEB1wD6QAEB+kABAdQB0PpAIdcLAcMAkQGSMW3iMRRDMGRj05c=';
const __init = 'te6ccgEBBwEAZgABFP8A9KQT9LzyyAsBAgFiAgMCAs0EBQAJoUrd4AsAAdQBGWW1tcAXIzAVERNs8yYGAGZQRYEBAc8AWM8WAc8WyCJus5p/AcoAEoEBAc8AlTJwWMoA4lggbpUwcAHLAZLPFuLJAcw=';
const __code = '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';
const __system = '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';
let systemCell = Cell.fromBase64(__system);
let builder = new TupleBuilder();
builder.writeCell(systemCell);

18
sources/tests/__snapshots__/jetton.spec.ts.snap

@ -13,14 +13,14 @@ exports[`jetton should deploy and deposit the wallet with the correct sum of mon
},
"bounce": true,
"from": "kQAI-3FJVc_ywSuY4vq0bYrzR7S4Och4y7bTU_i5yLOB3A6P",
"to": "kQCM9AmnDVgUtUtKjTYQmBC1nKt5dR8EsRWQvtvzNws01ZJu",
"to": "kQBvLWbJmRxsnDuBrGvOkN_QmzLpgeyyQf0XbfnIeM7XYTwh",
"type": "internal",
"value": 1200000000n,
},
"type": "received",
},
{
"gasUsed": 36303n,
"gasUsed": 37054n,
"type": "processed",
},
{
@ -31,8 +31,8 @@ exports[`jetton should deploy and deposit the wallet with the correct sum of mon
"type": "cell",
},
"bounce": false,
"from": "kQCM9AmnDVgUtUtKjTYQmBC1nKt5dR8EsRWQvtvzNws01ZJu",
"to": "kQB2vHcaIyjKkO_JMeWRZ8QN_zBjgfX7OHflzG9vrE3cUH-F",
"from": "kQBvLWbJmRxsnDuBrGvOkN_QmzLpgeyyQf0XbfnIeM7XYTwh",
"to": "kQDvdSDFqvr41l4MwWjbjCSwTka3iYJTlTEjj5rVuePsXsSa",
"type": "internal",
"value": 13474000n,
},
@ -43,15 +43,15 @@ exports[`jetton should deploy and deposit the wallet with the correct sum of mon
"messages": [
{
"body": {
"cell": "x{178D4519000000000000000043B9ACA0080119E8134E1AB0296A96951A6C2130216B3956F2EA3E09622B217DB7E66E1669AB00023EDC525573FCB04AE638BEAD1B62BCD1ED2E0E721E32EDB4D4FE2E722CE07702_}
x{800ED78EE3446519521DF9263CB22CF881BFE60C703EBF670EFCB98DEDF589BB8A1_}",
"cell": "x{178D4519000000000000000043B9ACA00800DE5ACD933238D938770358D79D21BFA13665D303D96483FA2EDBF390F19DAEC300023EDC525573FCB04AE638BEAD1B62BCD1ED2E0E721E32EDB4D4FE2E722CE07702_}
x{800000000000000000000000000000000000000000000000000000000000000020077BA9062D57D7C6B2F0660B46DC6125827235BC4C129CA9891C7CD6ADCF1F62F4_}",
"type": "cell",
},
"bounce": false,
"from": "kQCM9AmnDVgUtUtKjTYQmBC1nKt5dR8EsRWQvtvzNws01ZJu",
"to": "kQCs7NEVQDI566FHvxACpYud6bZ40nPH4s_v39XOEbexYPMS",
"from": "kQBvLWbJmRxsnDuBrGvOkN_QmzLpgeyyQf0XbfnIeM7XYTwh",
"to": "kQATwu07DUC3EW02Ouf3rQA9zbePcr9Z3bGajEVnEsilpexg",
"type": "internal",
"value": 21584000n,
"value": 30513000n,
},
],
"type": "sent",

8
sources/tests/jetton.spec.ts

@ -19,7 +19,6 @@ describe('jetton', () => {
// Mint
await contract.send(owner, { value: toNano('1.2') }, { $$type: 'Deposit', amount: toNano('1') });
let log = await system.run();
await system.run();
let events = tracker.events();
expect(events).toMatchSnapshot();
@ -35,5 +34,12 @@ describe('jetton', () => {
// Check owner
expect((await contract.getOwner()).toString()).toEqual(owner.address.toString());
// Withdraw
await contract.send(owner, { value: toNano('0.15') }, { $$type: 'Withdraw', amount: toNano('0.3') });
log = await system.run();
events = tracker.events();
expect((events[5] as any).messages[0].value).toBeGreaterThan(toNano('0.29'));
});
});

15
sources/wallet.tact

@ -13,7 +13,8 @@ contract TONBWallet {
balance: Int;
owner: Address;
master: Address;
linker: Address?;
linker: Int?;
linker_address: Address?;
init(master: Address, owner: Address) {
self.balance = 0;
@ -54,7 +55,8 @@ contract TONBWallet {
responseAddress: self.owner,
forwardTonAmount: msg.forwardTonAmount,
forwardPayload: msg.forwardPayload,
setLinker: null
setLinker: null,
setLinkerAddress: null
}.toCell(),
code: init.code,
data: init.data
@ -67,8 +69,9 @@ contract TONBWallet {
let ctx: Context = context();
if (self.linker == null) {
self.linker = msg.setLinker;
self.linker_address = msg.setLinkerAddress;
}
if (ctx.sender != self.master && ctx.sender != self.linker) {
if (ctx.sender != self.master && ctx.sender != self.linker_address) {
let sinit: StateInit = initOf TONBWallet(self.master, msg.from);
require(contractAddress(sinit) == ctx.sender, "Invalid sender");
}
@ -117,15 +120,15 @@ contract TONBWallet {
// Check sender
let ctx: Context = context();
require(ctx.sender == self.owner || ctx.sender == self.master || ctx.sender == self.linker, "Invalid sender");
require(ctx.sender == self.owner || ctx.sender == self.master || ctx.sender == self.linker_address, "Invalid sender");
// Update balance
self.balance = self.balance - msg.amount;
require(self.balance >= 0, "Invalid balance");
// Gas checks
// // Gas checks
let fwdFee: Int = ctx.readForwardFee();
require(ctx.value > fwdFee + 2 * self.gasConsumption + self.minTonsForStorage, "Invalid value");
require(ctx.value > 2 * self.gasConsumption + self.minTonsForStorage, "Invalid value");
// Burn tokens
send(SendParameters{

Loading…
Cancel
Save