1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-13 03:32:22 +00:00
ton/storage/storage-daemon/smartcont/storage-provider.fif
2023-05-24 10:29:34 +03:00

341 lines
19 KiB
Text

"Asm.fif" include
// automatically generated from `../../../crypto/smartcont/stdlib.fc` `storage-provider.fc` incl:`constants.fc`
PROGRAM{
DECLPROC calculate_address_by_stateinit
DECLPROC build_storage_contract_stateinit
DECLPROC deploy_storage_contract
DECLPROC recv_internal
DECLPROC recv_external
85143 DECLMETHOD seqno
78748 DECLMETHOD get_public_key
130271 DECLMETHOD get_wallet_params
104346 DECLMETHOD get_storage_params
119729 DECLMETHOD get_storage_contract_address
calculate_address_by_stateinit PROC:<{
// state_init
HASHCU // _1
0 PUSHINT // _1 _2=0
4 PUSHINT // _1 _2=0 _3=4
NEWC // _1 _2=0 _3=4 _4
3 STU // _1 _2=0 _6
8 STI // _1 _8
256 STU // _10
ENDC // _11
CTOS // _12
}>
build_storage_contract_stateinit PROC:<{
// merkle_hash file_size rate_per_mb_day max_span client torrent_hash
NEWC
ROT // merkle_hash file_size rate_per_mb_day max_span torrent_hash _7 client
STSLICER // merkle_hash file_size rate_per_mb_day max_span torrent_hash _8
256 STU // merkle_hash file_size rate_per_mb_day max_span _10
ENDC // merkle_hash file_size rate_per_mb_day max_span _11
NOW // merkle_hash file_size rate_per_mb_day max_span _11 _12
0 PUSHINT // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0
DUP // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0 _14=0
NEWC // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0 _14=0 _15
1 STI // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0 _17
OVER // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0 _17 _18=0
STGRAMS // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0 _19
MYADDR // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0 _19 _20
STSLICER // merkle_hash file_size rate_per_mb_day max_span _11 _12 _13=0 _21
s1 s7 XCHG // _13=0 file_size rate_per_mb_day max_span _11 _12 merkle_hash _21
256 STU // _13=0 file_size rate_per_mb_day max_span _11 _12 _23
s1 s5 XCHG // _13=0 _12 rate_per_mb_day max_span _11 file_size _23
64 STU // _13=0 _12 rate_per_mb_day max_span _11 _25
s1 s5 XCHG // _11 _12 rate_per_mb_day max_span _13=0 _25
64 STU // _11 _12 rate_per_mb_day max_span _27
ROT // _11 _12 max_span _27 rate_per_mb_day
STGRAMS // _11 _12 max_span _28
32 STU // _11 _12 _30
32 STU // _11 _32
STREF // _33
ENDC // data
0 PUSHINT // data _36=0
B{B5EE9C72010213010002FD000114FF00F4A413F4BCF2C80B0102016202030202CE04050201200D0E020120060700115D74CD0FA40D3FF30804E1007434C0C05C6C2497C0F83E900C0871C023A0D6F6CF380074C7C8700023A117C0F6CF3834CFC8A084391D237C6EA3AD4120829896802876CF3B51343C00E0842FDEF4305C20063232C1540133C5A0824C4B403E8084F2DA84B2C7D48832CFF2FFF25C3EC0244D388860841E8D85A22EA008080809006F35CE6CE4D7C11C3834C1C070C0E4D7C11C3834FFC12F64D7C0DC3800B50C1C25A010086B092E64693A0CC06AC140BD039BE84C645FF81C20002CED44D0D200FA0003A001C8CA0001FA0201CF16C9ED5403E68E4FED44D0D200FA00FA4003B3F2E3EF5350C705F2E1917FC8CA0058FA0201CF1621CF16C9ED54F003F8258210D4CAEDCD708018C8CB055005CF168209312D00FA0214CB6A13CB1F12CB3FCBFFC970FB00DE21821079F937EABAE30221821046ED2E94BA9130E30D8210419D5D4DBA915BE30D0A0B0C00EA10235F03ED44D0D200FA00FA40F0035352C7055162C70516B1F2E191F8258210B6236D63708018C8CB055004CF165005FA0212CB6A13CB1F12CB3F5230CBFFC902B39730318100A0FB00E0018040FB00F8258210B6236D63708018C8CB055004CF1623FA0213CB6A12CB1FCB3FCBFFC98100A0FB000092ED44D0D200FA00FA403002F2E3EB5341C705F2E19120C200998208989680A072FB029130E28210A91BAF56708018C8CB055003CF168209312D00FA0212CB6ACB1FCB3FC98100A0FB0000FA01D430ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FD43009F2E3EB53A6C705F2E191544540525BF001F2E3EA22F811F8235003A128B6085331A8018102A3AA1AA984067007A116B609F8237FC8CA0058FA025005CF1613CBFFCB3FCB3F58FA0213CB1F12CB1FCCC9ED54708018C8CB0558CF16CB6EC98042FB000201200F100011BEE6576A2686B8500402012011120033B9241ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FF00380017B6E4F0402A483DA87B0D9430001BB7CA50402A483DA87B0B664D8A70} B>boc PUSHREF // data _36=0 _37
OVER // data _36=0 _37 _38=0
NEWC // data _36=0 _37 _38=0 _39
2 STU // data _36=0 _37 _41
STOPTREF // data _36=0 _42
s1 s2 XCHG // _36=0 data _42
STOPTREF // _36=0 _43
1 STU // _45
ENDC // state_init
}>
deploy_storage_contract PROC:<{
// client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span
c4 PUSH // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span _8
CTOS // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span ds
320 PUSHINT // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span ds _21
LDSLICEX // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span _91 _90
NIP // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span ds
1 LDI // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span _23 ds
LDGRAMS // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span _23 _26 ds
32 LDU // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span _23 _26 _28 ds
64 LDU // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span _23 _26 _28 _31 ds
64 LDU // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span _23 _26 _28 _31 _101 _100
DROP // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span accept_new_contracts? rate_per_mb_day max_span minimal_file_size maximal_file_size
s0 s4 XCHG // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span maximal_file_size rate_per_mb_day max_span minimal_file_size accept_new_contracts?
1006 THROWIFNOT
s8 s(-1) PUXC // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span maximal_file_size rate_per_mb_day max_span file_size minimal_file_size
GEQ // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span maximal_file_size rate_per_mb_day max_span _40
1004 THROWIFNOT
s7 s2 PUXC // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span max_span rate_per_mb_day file_size maximal_file_size
LEQ // client query_id file_size merkle_hash torrent_hash expected_rate expected_max_span max_span rate_per_mb_day _43
1005 THROWIFNOT
s3 s3 XCPU // client query_id file_size merkle_hash torrent_hash rate_per_mb_day expected_max_span max_span expected_rate rate_per_mb_day
EQUAL // client query_id file_size merkle_hash torrent_hash rate_per_mb_day expected_max_span max_span _46
1009 THROWIFNOT
TUCK // client query_id file_size merkle_hash torrent_hash rate_per_mb_day max_span expected_max_span max_span
EQUAL // client query_id file_size merkle_hash torrent_hash rate_per_mb_day max_span _49
1009 THROWIFNOT
2SWAP
s1 s5 XCHG
s1 s6 XCHG // query_id merkle_hash file_size rate_per_mb_day max_span client torrent_hash
build_storage_contract_stateinit CALLDICT // query_id state_init
3832843761 PUSHINT // query_id state_init _54=3832843761
6 PUSHINT // query_id state_init _54=3832843761 _57
24 PUSHINT // query_id state_init _54=3832843761 _57 _58=24
NEWC // query_id state_init _54=3832843761 _57 _58=24 _59
6 STU // query_id state_init _54=3832843761 _57 _61
s3 PUSH // query_id state_init _54=3832843761 _57 _61 state_init
calculate_address_by_stateinit CALLDICT // query_id state_init _54=3832843761 _57 _61 _62
STSLICER // query_id state_init _54=3832843761 _57 _63
0 PUSHINT // query_id state_init _54=3832843761 _57 _63 _64=0
STGRAMS // query_id state_init _54=3832843761 _57 _65
108 STU // query_id state_init _54=3832843761 _81
s1 s2 XCHG // query_id _54=3832843761 state_init _81
STREF // query_id _54=3832843761 _82
32 STU // query_id _84
64 STU // _86
ENDC // msg
64 PUSHINT // msg _88=64
SENDRAWMSG
}>
recv_internal PROC:<{
c2 SAVE
SAMEALTSAVE // msg_value in_msg_full in_msg_body
SWAP // msg_value in_msg_body in_msg_full
CTOS // msg_value in_msg_body cs
4 LDU // msg_value in_msg_body flags cs
SWAP
1 PUSHINT // msg_value in_msg_body cs flags _9=1
AND // msg_value in_msg_body cs _10
s2 PUSH // msg_value in_msg_body cs _10 in_msg_body
SEMPTY // msg_value in_msg_body cs _10 _11
OR // msg_value in_msg_body cs _12
IFJMP:<{ // msg_value in_msg_body cs
3 BLKDROP //
}> // msg_value in_msg_body cs
LDMSGADDR // msg_value in_msg_body _141 _140
DROP // msg_value in_msg_body sender_address
SWAP // msg_value sender_address in_msg_body
32 LDU // msg_value sender_address op in_msg_body
OVER // msg_value sender_address op in_msg_body op
0 EQINT // msg_value sender_address op in_msg_body _21
IFJMP:<{ // msg_value sender_address op in_msg_body
4 BLKDROP //
}> // msg_value sender_address op in_msg_body
64 LDU // msg_value sender_address op query_id in_msg_body
s2 PUSH
276580847 PUSHINT // msg_value sender_address op query_id in_msg_body op _26=276580847
EQUAL // msg_value sender_address op query_id in_msg_body _27
IFJMP:<{ // msg_value sender_address op query_id in_msg_body
s2 POP // msg_value sender_address in_msg_body query_id
s0 s3 XCHG
60000000 PUSHINT // query_id sender_address in_msg_body msg_value _29=60000000
GEQ // query_id sender_address in_msg_body _30
1001 THROWIFNOT
LDREF // query_id sender_address torrent_info in_msg_body
OVER // query_id sender_address torrent_info in_msg_body torrent_info
HASHCU // query_id sender_address torrent_info in_msg_body torrent_hash
s0 s2 XCHG // query_id sender_address torrent_hash in_msg_body torrent_info
CTOS // query_id sender_address torrent_hash in_msg_body info_cs
32 PUSHINT // query_id sender_address torrent_hash in_msg_body info_cs _40=32
SDSKIPFIRST // query_id sender_address torrent_hash in_msg_body info_cs
64 LDU // query_id sender_address torrent_hash in_msg_body _149 _148
DROP // query_id sender_address torrent_hash in_msg_body file_size
SWAP // query_id sender_address torrent_hash file_size in_msg_body
256 LDU // query_id sender_address torrent_hash file_size merkle_hash in_msg_body
LDGRAMS // query_id sender_address torrent_hash file_size merkle_hash expected_rate in_msg_body
32 LDU // query_id sender_address torrent_hash file_size merkle_hash expected_rate _155 _154
DROP // query_id sender_address torrent_hash file_size merkle_hash expected_rate expected_max_span
s5 s6 XCHG
s3 s4 XCHG
s2 s3 XCHG // sender_address query_id file_size merkle_hash torrent_hash expected_rate expected_max_span
deploy_storage_contract CALLDICT
}> // msg_value sender_address op query_id in_msg_body
NIP
s3 POP // in_msg_body sender_address op
DUP
3055775075 PUSHINT // in_msg_body sender_address op op _58=3055775075
EQUAL // in_msg_body sender_address op _59
IFJMP:<{ // in_msg_body sender_address op
3 BLKDROP //
}> // in_msg_body sender_address op
DUP
1408453846 PUSHINT // in_msg_body sender_address op op _60=1408453846
EQUAL // in_msg_body sender_address op _61
IF:<{ // in_msg_body sender_address op
MYADDR // in_msg_body sender_address op _62
s2 PUSH // in_msg_body sender_address op _62 sender_address
SDEQ // in_msg_body sender_address op _63
NOT // in_msg_body sender_address op _64
IFJMP:<{ // in_msg_body sender_address op
3 BLKDROP //
RETALT
}> // in_msg_body sender_address op
c4 PUSH // in_msg_body sender_address op _66
CTOS // in_msg_body sender_address op ds
64 LDSLICE // in_msg_body sender_address op _71 ds
256 LDU // in_msg_body sender_address op _71 _159 _158
NIP // in_msg_body sender_address op seqno_subwallet non_wallet_data
s0 s4 XCHG // non_wallet_data sender_address op seqno_subwallet in_msg_body
256 LDU // non_wallet_data sender_address op seqno_subwallet new_pubkey in_msg_body
NEWC // non_wallet_data sender_address op seqno_subwallet new_pubkey in_msg_body _83
s0 s3 XCHG2 // non_wallet_data sender_address op in_msg_body new_pubkey _83 seqno_subwallet
STSLICER // non_wallet_data sender_address op in_msg_body new_pubkey _84
256 STU // non_wallet_data sender_address op in_msg_body _86
s0 s4 XCHG2 // in_msg_body sender_address op _86 non_wallet_data
STSLICER // in_msg_body sender_address op _87
ENDC // in_msg_body sender_address op _88
c4 POP
}> // in_msg_body sender_address op
1422651803 PUSHINT // in_msg_body sender_address op _90=1422651803
EQUAL // in_msg_body sender_address _91
IF:<{ // in_msg_body sender_address
MYADDR // in_msg_body sender_address _92
SWAP // in_msg_body _92 sender_address
SDEQ // in_msg_body _93
NOT // in_msg_body _94
IFJMP:<{ // in_msg_body
DROP //
RETALT
}> // in_msg_body
c4 PUSH // in_msg_body _96
CTOS // in_msg_body ds
320 PUSHINT // in_msg_body ds _104
LDSLICEX // in_msg_body _163 _162
DROP // in_msg_body wallet_data
SWAP // wallet_data in_msg_body
1 LDI // wallet_data _111 in_msg_body
LDGRAMS // wallet_data _111 _114 in_msg_body
32 LDU // wallet_data _111 _114 _116 in_msg_body
64 LDU // wallet_data _111 _114 _116 _119 in_msg_body
64 LDU // wallet_data _111 _114 _116 _119 _173 _172
DROP // wallet_data accept_new_contracts? rate_per_mb_day max_span minimal_file_size maximal_file_size
NEWC // wallet_data accept_new_contracts? rate_per_mb_day max_span minimal_file_size maximal_file_size _125
s0 s6 XCHG2 // maximal_file_size accept_new_contracts? rate_per_mb_day max_span minimal_file_size _125 wallet_data
STSLICER // maximal_file_size accept_new_contracts? rate_per_mb_day max_span minimal_file_size _126
s1 s4 XCHG // maximal_file_size minimal_file_size rate_per_mb_day max_span accept_new_contracts? _126
1 STI // maximal_file_size minimal_file_size rate_per_mb_day max_span _128
ROT // maximal_file_size minimal_file_size max_span _128 rate_per_mb_day
STGRAMS // maximal_file_size minimal_file_size max_span _129
32 STU // maximal_file_size minimal_file_size _131
64 STU // maximal_file_size _133
64 STU // _135
ENDC // _136
c4 POP
}>ELSE<{
2DROP //
}>
}>
recv_external PROC:<{
// in_msg
9 PUSHPOW2 // in_msg _3=512
LDSLICEX // signature in_msg
DUP // signature in_msg cs
32 LDU // signature in_msg _9 cs
32 LDU // signature in_msg _9 _12 cs
32 LDU // signature in_msg subwallet_id valid_until msg_seqno cs
s0 s2 XCHG
NOW // signature in_msg subwallet_id cs msg_seqno valid_until _19
LEQ // signature in_msg subwallet_id cs msg_seqno _20
35 THROWIF
c4 PUSH // signature in_msg subwallet_id cs msg_seqno _23
CTOS // signature in_msg subwallet_id cs msg_seqno ds
32 LDU // signature in_msg subwallet_id cs msg_seqno _29 ds
32 LDU // signature in_msg subwallet_id cs msg_seqno _29 _32 ds
256 LDU // signature in_msg subwallet_id cs msg_seqno stored_seqno stored_subwallet public_key non_wallet_data
s4 s3 XCPU // signature in_msg subwallet_id cs non_wallet_data stored_seqno stored_subwallet public_key msg_seqno stored_seqno
EQUAL // signature in_msg subwallet_id cs non_wallet_data stored_seqno stored_subwallet public_key _39
33 THROWIFNOT
s5 s1 XCPU // signature in_msg public_key cs non_wallet_data stored_seqno stored_subwallet subwallet_id stored_subwallet
EQUAL // signature in_msg public_key cs non_wallet_data stored_seqno stored_subwallet _42
34 THROWIFNOT
s0 s5 XCHG // signature stored_subwallet public_key cs non_wallet_data stored_seqno in_msg
HASHSU // signature stored_subwallet public_key cs non_wallet_data stored_seqno _45
s0 s6 s4 XC2PU // stored_seqno stored_subwallet public_key cs non_wallet_data _45 signature public_key
CHKSIGNU // stored_seqno stored_subwallet public_key cs non_wallet_data _46
35 THROWIFNOT
ACCEPT
SWAP // stored_seqno stored_subwallet public_key non_wallet_data cs
WHILE:<{
DUP // stored_seqno stored_subwallet public_key non_wallet_data cs cs
SREFS // stored_seqno stored_subwallet public_key non_wallet_data cs _51
}>DO<{ // stored_seqno stored_subwallet public_key non_wallet_data cs
8 LDU // stored_seqno stored_subwallet public_key non_wallet_data mode cs
LDREF // stored_seqno stored_subwallet public_key non_wallet_data mode _56 cs
s0 s2 XCHG // stored_seqno stored_subwallet public_key non_wallet_data cs _56 mode
SENDRAWMSG
}> // stored_seqno stored_subwallet public_key non_wallet_data cs
DROP // stored_seqno stored_subwallet public_key non_wallet_data
s0 s3 XCHG // non_wallet_data stored_subwallet public_key stored_seqno
INC // non_wallet_data stored_subwallet public_key _60
NEWC // non_wallet_data stored_subwallet public_key _60 _61
32 STU // non_wallet_data stored_subwallet public_key _63
s1 s2 XCHG // non_wallet_data public_key stored_subwallet _63
32 STU // non_wallet_data public_key _65
256 STU // non_wallet_data _67
SWAP // _67 non_wallet_data
STSLICER // _68
ENDC // _69
c4 POP
}>
seqno PROC:<{
//
c4 PUSH // _0
CTOS // _1
32 PLDU // _3
}>
get_public_key PROC:<{
//
c4 PUSH // _1
CTOS // cs
64 LDU // _9 _8
NIP // cs
256 PLDU // _7
}>
get_wallet_params PROC:<{
//
c4 PUSH // _1
CTOS // ds
32 LDU // _6 ds
32 LDU // _6 _9 ds
256 LDU // _6 _9 _20 _19
DROP // stored_seqno stored_subwallet public_key
}>
get_storage_params PROC:<{
//
c4 PUSH // _1
CTOS // ds
320 PUSHINT // ds _14
LDSLICEX // _31 _30
NIP // ds
1 LDI // _16 ds
LDGRAMS // _16 _19 ds
32 LDU // _16 _19 _21 ds
64 LDU // _16 _19 _21 _24 ds
64 LDU // _16 _19 _21 _24 _41 _40
DROP // accept_new_contracts? rate_per_mb_day max_span minimal_file_size maximal_file_size
}>
get_storage_contract_address PROC:<{
// merkle_hash file_size client torrent_hash
get_storage_params CALLDICT // merkle_hash file_size client torrent_hash _13 _14 _15 _16 _17
2DROP
s2 POP // merkle_hash file_size client torrent_hash max_span rate_per_mb_day
s1 s3 s3 XCHG3 // merkle_hash file_size rate_per_mb_day max_span client torrent_hash
build_storage_contract_stateinit CALLDICT // state_init
calculate_address_by_stateinit CALLDICT // _12
}>
}END>c