Address | TGR Token |
Chain | Basic Workchain |
Contract Type | ๐ Verfied source |
Contract Code Hash | OU4jb9qkeNIYqpI7BtwNOtCM5ly85bCrPq1ixh2mmSA= |
;; TRG MONEY ICO CODE
(int) equal_slices(slice s1, slice s2) asm "SDEQ";
builder store_builder(builder to, builder what) asm(what to) "STB";
builder store_builder_ref(builder to, builder what) asm(what to) "STBREFR";
(slice, cell) load_maybe_cell(slice s) asm( -> 1 0) "LDDICT";
(int) mod (int x, int y) asm "MOD";
builder store_coins(builder b, int x) asm "STGRAMS";
(slice, int) load_coins(slice s) asm( -> 1 0) "LDGRAMS";
int limit_init() asm "50000000000000000 PUSHINT"; ;; 50 mln jetton limit
int op::transfer() asm "0xf8a7ea5 PUSHINT";
int op::transfer_notification() asm "0x7362d09c PUSHINT";
int op::internal_transfer() asm "0x178d4519 PUSHINT";
int op::excesses() asm "0xd53276db PUSHINT";
int op::burn() asm "0x595f07bc PUSHINT";
int op::burn_notification() asm "0x7bdd97de PUSHINT";
int workchain() asm "0 PUSHINT";
() force_chain(slice addr) impure {
(int wc, _) = parse_std_addr(addr);
throw_unless(333, wc == workchain());
}
;; Minter
int op::mint() asm "21 PUSHINT";
cell pack_jetton_wallet_data(int balance, slice owner_address, slice jetton_master_address, cell jetton_wallet_code) inline {
return begin_cell()
.store_coins(balance)
.store_slice(owner_address)
.store_slice(jetton_master_address)
.store_ref(jetton_wallet_code)
.end_cell();
}
cell calculate_jetton_wallet_state_init(slice owner_address, slice jetton_master_address, cell jetton_wallet_code) inline {
return begin_cell()
.store_uint(0, 2)
.store_dict(jetton_wallet_code)
.store_dict(pack_jetton_wallet_data(0, owner_address, jetton_master_address, jetton_wallet_code))
.store_uint(0, 1)
.end_cell();
}
slice calculate_jetton_wallet_address(cell state_init) inline {
return begin_cell().store_uint(4, 3)
.store_int(workchain(), 8)
.store_uint(cell_hash(state_init), 256)
.end_cell()
.begin_parse();
}
slice calculate_user_jetton_wallet_address(slice owner_address, slice jetton_master_address, cell jetton_wallet_code) inline {
return calculate_jetton_wallet_address(calculate_jetton_wallet_state_init(owner_address, jetton_master_address, jetton_wallet_code));
}
slice msg_witraw() asm "<b 124 word Withdraw ton ot prodazhi trg coins| $, b> <s PUSHSLICE";
(int, slice, cell, cell, int, int, int) load_data() inline {
slice ds = get_data().begin_parse();
return (
ds~load_coins(),
ds~load_msg_addr(),
ds~load_ref(),
ds~load_ref(),
ds~load_coins(),
ds~load_coins(),
ds~load_uint(32)
);
}
() save_data(int total_supply, slice admin_address, cell content, cell jetton_wallet_code, int price, int limit, int end) impure inline {
set_data(begin_cell()
.store_coins(total_supply)
.store_slice(admin_address)
.store_ref(content)
.store_ref(jetton_wallet_code)
.store_coins(price)
.store_coins(limit)
.store_uint(end, 32)
.end_cell()
);
}
() mint_trg(slice to_address, cell jetton_wallet_code, int amount, cell master_msg) impure {
cell state_init = calculate_jetton_wallet_state_init(to_address, my_address(), jetton_wallet_code);
slice to_wallet_address = calculate_jetton_wallet_address(state_init);
var msg = begin_cell()
.store_uint(0x18, 6)
.store_slice(to_wallet_address)
.store_coins(amount)
.store_uint(4 + 2 + 1, 1 + 4 + 4 + 64 + 32 + 1 + 1 + 1)
.store_ref(state_init)
.store_ref(master_msg);
send_raw_message(msg.end_cell(), 1);
}
() recv_internal(int msg_value, cell in_msg_full, slice in_msg_body) impure {
slice cs = in_msg_full.begin_parse();
int flags = cs~load_uint(4);
if (flags & 1) {
return ();
}
slice sender_address = cs~load_msg_addr();
(int total_supply, slice admin_address, cell content, cell jetton_wallet_code, int price, int limit, int end) = load_data();
if (in_msg_body.slice_empty?()) { ;; buy trg for Toncoin or withdraw
if(equal_slices(sender_address, admin_address)) {
int amount = get_balance().pair_first() - 1000000000;
var msg = begin_cell()
.store_uint(0x18, 6)
.store_slice(admin_address)
.store_coins(amount)
.store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
.store_uint(0, 32)
.store_slice(msg_witraw());
send_raw_message(msg.end_cell(), 0);
return ();
}
if(total_supply >= limit) {
throw(4122);
}
if (now() >= end) { ;; check time
throw(4123);
}
int amount = 50000000; ;; 0.05 TON for mint message
int buy_amount = msg_value - amount;
throw_unless(76, buy_amount > 0);
int jetton_amount = buy_amount * 1000000000 / price;
throw_unless(79, jetton_amount > 0);
var master_msg = begin_cell()
.store_uint(op::internal_transfer(), 32)
.store_uint(0, 64)
.store_coins(jetton_amount)
.store_slice(my_address())
.store_slice(sender_address)
.store_coins(0)
.store_uint(0, 1)
.end_cell();
mint_trg(sender_address, jetton_wallet_code, amount, master_msg);
save_data(total_supply + jetton_amount, admin_address, content, jetton_wallet_code, price, limit, end);
return ();
}
int op = in_msg_body~load_uint(32);
int query_id = in_msg_body~load_uint(64);
if (op == op::mint()) {
throw_if(4218, total_supply >= limit_init());
throw_unless(73, equal_slices(sender_address, admin_address));
slice to_address = in_msg_body~load_msg_addr();
int amount = in_msg_body~load_coins();
cell master_msg = in_msg_body~load_ref();
slice master_msg_cs = master_msg.begin_parse();
master_msg_cs~skip_bits(32 + 64); ;; op + query_id
int jetton_amount = master_msg_cs~load_coins();
mint_trg(to_address, jetton_wallet_code, amount, master_msg);
save_data(total_supply + jetton_amount, admin_address, content, jetton_wallet_code, price, limit, end);
return ();
}
if (op == op::burn_notification()) {
int jetton_amount = in_msg_body~load_coins();
slice from_address = in_msg_body~load_msg_addr();
throw_unless(74,
equal_slices(calculate_user_jetton_wallet_address(from_address, my_address(), jetton_wallet_code), sender_address)
);
save_data(total_supply - jetton_amount, admin_address, content, jetton_wallet_code, price, limit, end);
slice response_address = in_msg_body~load_msg_addr();
if (response_address.preload_uint(2) != 0) {
var msg = begin_cell()
.store_uint(0x10, 6)
.store_slice(response_address)
.store_coins(0)
.store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
.store_uint(op::excesses(), 32)
.store_uint(query_id, 64);
send_raw_message(msg.end_cell(), 2 + 64);
}
return ();
}
throw(0xffff);
}
(int, int, slice, cell, cell) get_jetton_data() method_id {
(int total_supply, slice admin_address, cell content, cell jetton_wallet_code, int price, int limit, int end) = load_data();
return (total_supply, -1, admin_address, content, jetton_wallet_code);
}
slice get_wallet_address(slice owner_address) method_id {
(int total_supply, slice admin_address, cell content, cell jetton_wallet_code, int price, int limit, int end) = load_data();
return calculate_user_jetton_wallet_address(owner_address, my_address(), jetton_wallet_code);
}
(int, int, int) get_price() method_id {
(int total_supply, slice admin_address, cell content, cell jetton_wallet_code, int price, int limit, int end) = load_data();
return (price, limit, end);
}
SETCP0
(:methods
recv_internal:
s0 s1 XCHG
CTOS
4 LDU
s0 s1 XCHG
1 PUSHINT
AND
<{
3 BLKDROP
}> PUSHCONT
IFJMP
LDMSGADDR
s0 POP
c4 PUSH
CTOS
LDGRAMS
LDMSGADDR
LDREF
LDREF
LDGRAMS
LDGRAMS
32 LDU
s0 POP
s8 PUSH
SEMPTY
<{
s8 POP
s6 s4 PUSH2
SDEQ
<{
s4 s8 XCHG
8 BLKDROP
BALANCE
0 INDEX
1000000000 PUSHINT
SUB
0 PUSHINT
s0 PUSH
24 PUSHINT
NEWC
6 STU
s0 s4 XCHG2
STSLICER
ROT
STGRAMS
s1 s2 XCHG
107 STU
32 STU
PUSHSLICE
STSLICER
ENDC
0 PUSHINT
SENDRAWMSG
}> PUSHCONT
IFJMP
s5 s0 PUSH2
GEQ
<{
4122 PUSHINT
THROWANY
}> PUSHCONT
IF
NOW
s8 PUSH
GEQ
<{
4123 PUSHINT
THROWANY
}> PUSHCONT
IF
50000000 PUSHINT
s9 s9 XCPU
SUB
s0 PUSH
0 GTINT
76 THROWIFNOT
1000000000 PUSHINT
MUL
s2 PUSH
DIV QOUT
s0 PUSH
0 GTINT
79 THROWIFNOT
0 PUSHINT
s0 PUSH
395134233 PUSHINT
NEWC
32 STU
64 STU
s2 PUSH
STGRAMS
MYADDR
STSLICER
s9 PUSH
STSLICER
s1 PUSH
STGRAMS
1 STU
ENDC
s4 PUSH
s3 s9 XCHG
s0 s11 s11 XCHG3
8 CALLDICT
s4 s7 XCHG2
ADD
s6 s1 s6 XCHG3
s4 s5 XCHG2
NEWC
s0 s7 XCHG2
STGRAMS
s0 s5 XCHG2
STSLICER
s1 s3 XCHG
STREF
STREF
s0 s1 XCHG
STGRAMS
s0 s1 XCHG
STGRAMS
32 STU
ENDC
c4 POP
}> IFJMPREF
s9 POP
s0 s7 XCHG
32 LDU
64 LDU
21 PUSHINT
s3 s-1 PUXC
EQUAL
<{
2 1 BLKDROP2
4218 PUSHINT
50000000000000000 PUSHINT
s7 s-1 PUXC
GEQ
THROWANYIF
s6 s4 XCPU
SDEQ
73 THROWIFNOT
s0 s5 XCHG
LDMSGADDR
LDGRAMS
LDREF
s0 POP
s0 PUSH
CTOS
96 PUSHINT
SDSKIPFIRST
LDGRAMS
s0 POP
s4 PUSH
s3 s4 XCHG
s4 s2 XCHG2
8 CALLDICT
s1 s4 XCHG
ADD
s5 s4 s6 XCHG3
s1 s2 XCHG
NEWC
s0 s7 XCHG2
STGRAMS
s0 s5 XCHG2
STSLICER
s1 s3 XCHG
STREF
STREF
s0 s1 XCHG
STGRAMS
s0 s1 XCHG
STGRAMS
32 STU
ENDC
c4 POP
}> IFJMPREF
2078119902 PUSHINT
s1 s3 XCHG
EQUAL
<{
s0 s1 XCHG
LDGRAMS
LDMSGADDR
MYADDR
2 0 6 XC2PU
0 PUSHINT
0 1 2 XCPUXC
4 0 3 XC2PU
NEWC
s0 s4 XCHG2
STGRAMS
ROT
STSLICER
s0 s1 XCHG
STSLICER
STREF
ENDC
s2 PUSH
NEWC
2 STU
s1 s2 XCHG
STDICT
STDICT
1 STU
ENDC
HASHCU
0 PUSHINT
4 PUSHINT
NEWC
3 STU
8 STI
256 STU
ENDC
CTOS
s0 s9 XCHG2
SDEQ
74 THROWIFNOT
s1 s6 XCHG
SUB
s0 s6 XCHG
s4 s5 XCHG
s3 s4 XCHG
s1 s3 s8 XCHG3
s1 s7 XCHG
NEWC
s0 s7 XCHG2
STGRAMS
s0 s5 XCHG2
STSLICER
s1 s3 XCHG
STREF
STREF
s0 s1 XCHG
STGRAMS
s0 s1 XCHG
STGRAMS
32 STU
ENDC
c4 POP
s0 s1 XCHG
LDMSGADDR
s0 POP
s0 PUSH
2 PLDU
0 NEQINT
<{
2DROP
}> PUSHCONT
<{
3576854235 PUSHINT
0 PUSHINT
16 PUSHINT
NEWC
6 STU
s0 s3 XCHG2
STSLICER
s2 PUSH
STGRAMS
s1 s2 XCHG
107 STU
32 STU
64 STU
ENDC
66 PUSHINT
SENDRAWMSG
}> IFREFELSE
}> IFJMPREF
10 BLKDROP
16 PUSHPOW2DEC
THROWANY
8:
MYADDR
s4 s0 s3 XCHG3
0 PUSHINT
0 1 2 XCPUXC
4 0 3 XC2PU
NEWC
s0 s4 XCHG2
STGRAMS
ROT
STSLICER
s0 s1 XCHG
STSLICER
STREF
ENDC
s2 PUSH
NEWC
2 STU
s1 s2 XCHG
STDICT
STDICT
1 STU
ENDC
s0 PUSH
HASHCU
0 PUSHINT
4 PUSHINT
NEWC
3 STU
8 STI
256 STU
ENDC
CTOS
7 PUSHINT
24 PUSHINT
NEWC
6 STU
ROT
STSLICER
s0 s4 XCHG2
STGRAMS
s1 s3 XCHG
108 STU
s1 s2 XCHG
STREF
STREF
ENDC
1 PUSHINT
SENDRAWMSG
get_wallet_address:
c4 PUSH
CTOS
LDGRAMS
LDMSGADDR
LDREF
LDREF
LDGRAMS
LDGRAMS
32 LDU
s0 POP
s3 s6 XCHG
6 BLKDROP
MYADDR
s0 s1 XCHG
0 PUSHINT
0 1 2 XCPUXC
4 0 3 XC2PU
NEWC
s0 s4 XCHG2
STGRAMS
ROT
STSLICER
s0 s1 XCHG
STSLICER
STREF
ENDC
s2 PUSH
NEWC
2 STU
s1 s2 XCHG
STDICT
STDICT
1 STU
ENDC
HASHCU
0 PUSHINT
4 PUSHINT
NEWC
3 STU
8 STI
256 STU
ENDC
CTOS
get_jetton_data:
c4 PUSH
CTOS
LDGRAMS
LDMSGADDR
LDREF
LDREF
LDGRAMS
LDGRAMS
32 LDU
s0 POP
3 BLKDROP
-1 PUSHINT
3 1 BLKSWAP
108963:
c4 PUSH
CTOS
LDGRAMS
LDMSGADDR
LDREF
LDREF
LDGRAMS
LDGRAMS
32 LDU
s0 POP
4 3 BLKDROP2
) 19 DICTPUSHCONST
DICTIGETJMPZ
11 THROWARG
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
x{FF00F4A413F4BCF2C80B}
x{62_}
x{CC}
x{D80E8698180B8D8492F81F07D201876A2687D007D206A6A7D007D00698F9814638071811C83E98FE99FC00AA9185D718141083DEECBEF09DD71812F854207F9784_}
x{385364C7058E4D10485F08F8276F1082103B9ACA00A170208018C8CB055004CF1658FA0212CB6ACB1F8D0895DA5D1A191C985DC81D1BDB881BDD081C1C9BD9185E9A1A481D1C99C818DBDA5B9CE0CF16C970FB00E05350BE9581101AF2F0DEF82328BE9581101BF2F0DE820AFAF0805199A120C200F2E04C82103B9ACA00A8}
x{22A90420C200F2E04F70208210178D4519C8CB1FCB3F22FA02F828CF1629CF1621FA02CB00C924103940BBF0085047A046165045C85007FA025005CF1613CCCC01FA0201FA02CB1FC9ED54}
x{6C2181107A8228B1A2BC2EC500005270BEF2F25164C705F2E04905FA40FA00D43020D08060D721FA00302410345042F00814A0454612C85007FA025005CF1613CCCC01FA0201FA02CB1FC9ED54}
x{01FA00FA40F82854120670542013541403C85004FA0258CF1601CF16CCC922C8CB0112F400F400CB00C9F9007074C8CB02CA07CBFFC9D05009C705F2E04A16A10610451034413817C85007FA025005CF1613CCCC01FA0201FA02CB1FC9ED5401FA403020D70B01C300915BE30D}
x{8210D53276DB708010C8CB055003CF1622FA0212CB6ACB1FCB3FC98042FB00}
x{DFC142201B82A1009AA0A01E428027D012C678B00E78B666491646580897A007A00658064907C80383A6465816503E5FFE4E83BC00C646582AC678B28027D0109E5B589666664B8FD804_}
x{6A_}
x{5}
x{ADBCF6A2687D007D206A6A7D007D00698F98081B2F837C1400B82A1009AA0A01E428027D012C678B00E78B666491646580897A007A00658064FC80383A6465816503E5FFE4E84_}
x{AF16F6A2687D007D206A6A7D007D00698F982F81BFAA904_}
x{B5347DA89A1F401F481A9A9F401F401A63E60D887_}
x{7B1A2BC6A5F7FC88017B0E3213EB082B0D139F0CA418A991DF446AB32E7BB896104197A258A290658480BEBC200E470DE4DF820000C57C7201_}
x{0168747470733A2F2F746567726F2E696F2F7467722E6A736F6E}
x{FF00F4A413F4BCF2C80B}
x{62_}
x{CC}
x{D4_}
x{0831C02497C138007434C0C05C6C2544D7C0FC02F83E903E900C7E800C5C75C87E800C7E800C00B4C7E08403E29FA954882EA54C4D167C0238208405E3514654882EA58C511100FC02780D60841657C1EF2EA4D67C02B817C12103FCBC2_}
x{3E910C1C2EBCB8536_}
x{4}
x{2_}
x{00F4CFFE803E90087C007B51343E803E903E90350C144DA8548AB1C17CB8B04A30BFFCB8B0950D109C150804D50500F214013E809633C58073C5B33248B232C044BD003D0032C032483E401C1D3232C0B281F2FFF274013E903D010C7E801DE0063232C1540233C59C3E8085F2DAC4F3208405E351467232C7C66_}
x{CB3F5007FA0222CF165006CF1625FA025003CF16C95005CC2391729171E25008A813A08208989680AA008208989680A0A014BCF2E2C504C98040FB001023C85004FA0258CF1601CF16CCC9ED54}
x{3B51343E803E903E90350C0234CFFE80145468017E903E9014D6F1C1551CDB5C150804D50500F214013E809633C58073C5B33248B232C044BD003D0032C0327E401C1D3232C0B281F2FFF274140371C1472C7CB8B0C2BE80146A2860822625A020822625A004AD822860822625A028062849F8C3C975C2C070C008E_}
x{5279A018A182107362D09CC8CB1F5230CB3F58FA025007CF165007CF16C9718018C8CB0524CF165006FA0215CB6A14CCC971FB0010241023}
x{10491038375F04}
x{C200B08E218210D53276DB708010C8CB055008CF165004FA0216CB6A12CB1F12CB3FC972FB0093356C21E203C85004FA0258CF1601CF16CCC9ED54}
x{2_}
x{3B51343E803E903E90350C01F4CFFE803E900C145468549271C17CB8B049F0BFFCB8B0A0822625A02A8005A805AF3CB8B0E0841EF765F7B232C7C572CFD400FE8088B3C58073C5B25C60063232C14933C59C3E80B2DAB33260103EC01004F214013E809633C58073C5B3327B552_}
x{200835C87B51343E803E903E90350C0134C7E08405E3514654882EA0841EF765F784EE84AC7CB8B174CFCC7E800C04E81408F214013E809633C58073C5B3327B552_}
x{A0F605DA89A1F401F481F481A861_}