Skip to content

Commit 7a78ea3

Browse files
authored
Update op-code for provider/contract interaction (#602)
* Update provider->contract deploy_contract op-code * Switch to B{} representation of child contracts
1 parent 681b494 commit 7a78ea3

File tree

8 files changed

+31
-22
lines changed

8 files changed

+31
-22
lines changed

storage/storage-daemon/StorageProvider.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,13 @@ void StorageProvider::process_transaction(tl_object_ptr<tonlib_api::raw_transact
258258
}
259259
td::Ref<vm::Cell> body = r_body.move_as_ok();
260260
vm::CellSlice cs = vm::load_cell_slice(body);
261-
// const op::offer_storage_contract = 0x107c49ef;
262-
if (cs.size() >= 32 && cs.prefetch_long(32) == 0x107c49ef) {
263-
new_contract_address = message->destination_->account_address_;
261+
if (cs.size() >= 32) {
262+
long long op_code = cs.prefetch_long(32);
263+
// const op::offer_storage_contract = 0x107c49ef; -- old versions
264+
// const op::deploy_storage_contract = 0xe4748df1; -- new versions
265+
if((op_code == 0x107c49ef) || (op_code == 0xe4748df1)) {
266+
new_contract_address = message->destination_->account_address_;
267+
}
264268
}
265269
}
266270
if (!new_contract_address.empty()) {

storage/storage-daemon/smartcont/constants.fc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const op::offer_storage_contract = 0x107c49ef;
2+
const op::deploy_storage_contract = 0xe4748df1;
23
const op::close_contract = 0x79f937ea;
34
const op::contract_deployed = 0xbf7bd0c1;
45
const op::storage_contract_confirmed = 0xd4caedcd;
Binary file not shown.

storage/storage-daemon/smartcont/storage-contract.fc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ int check_proof(int merkle_hash, int byte_to_proof, int file_size, cell file_dic
7676

7777
int query_id = in_msg_body~load_uint(64);
7878

79-
if(op == op::offer_storage_contract) {
79+
if(op == op::deploy_storage_contract) {
8080
add_to_balance(msg_value - 2 * fee::receipt_value);
8181
var (client, torrent_hash) = get_client_data(get_data().begin_parse());
8282
var msg = begin_cell()
@@ -263,4 +263,4 @@ _ get_next_proof_info() method_id {
263263
next_proof, rate_per_mb_day, max_span, last_proof_time,
264264
client, torrent_hash) = get_storage_contract_data();
265265
return (next_proof, last_proof_time, max_span);
266-
}
266+
}

storage/storage-daemon/smartcont/storage-contract.fif

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ PROGRAM{
111111
}> // msg_value sender_address op in_msg_body
112112
64 LDU // msg_value sender_address op query_id in_msg_body
113113
s2 PUSH
114-
276580847 PUSHINT // msg_value sender_address op query_id in_msg_body op _27=276580847
114+
3832843761 PUSHINT // msg_value sender_address op query_id in_msg_body op _27=3832843761
115115
EQUAL // msg_value sender_address op query_id in_msg_body _28
116116
IF:<{ // msg_value sender_address op query_id in_msg_body
117117
s0 s4 XCHG
Binary file not shown.

storage/storage-daemon/smartcont/storage-provider.fc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44

55
const min_deploy_amount = 50000000;
66

7-
cell storage_contract_code() asm """ "storage-contract-code.boc" file>B B>boc PUSHREF """;
7+
;; cell storage_contract_code() asm """ "storage-contract-code.boc" file>B B>boc PUSHREF """;
8+
;; the same constant but more "compiler" friendly
9+
cell storage_contract_code() asm " B{B5EE9C72010213010002FD000114FF00F4A413F4BCF2C80B0102016202030202CE04050201200D0E020120060700115D74CD0FA40D3FF30804E1007434C0C05C6C2497C0F83E900C0871C023A0D6F6CF380074C7C8700023A117C0F6CF3834CFC8A084391D237C6EA3AD4120829896802876CF3B51343C00E0842FDEF4305C20063232C1540133C5A0824C4B403E8084F2DA84B2C7D48832CFF2FFF25C3EC0244D388860841E8D85A22EA008080809006F35CE6CE4D7C11C3834C1C070C0E4D7C11C3834FFC12F64D7C0DC3800B50C1C25A010086B092E64693A0CC06AC140BD039BE84C645FF81C20002CED44D0D200FA0003A001C8CA0001FA0201CF16C9ED5403E68E4FED44D0D200FA00FA4003B3F2E3EF5350C705F2E1917FC8CA0058FA0201CF1621CF16C9ED54F003F8258210D4CAEDCD708018C8CB055005CF168209312D00FA0214CB6A13CB1F12CB3FCBFFC970FB00DE21821079F937EABAE30221821046ED2E94BA9130E30D8210419D5D4DBA915BE30D0A0B0C00EA10235F03ED44D0D200FA00FA40F0035352C7055162C70516B1F2E191F8258210B6236D63708018C8CB055004CF165005FA0212CB6A13CB1F12CB3F5230CBFFC902B39730318100A0FB00E0018040FB00F8258210B6236D63708018C8CB055004CF1623FA0213CB6A12CB1FCB3FCBFFC98100A0FB000092ED44D0D200FA00FA403002F2E3EB5341C705F2E19120C200998208989680A072FB029130E28210A91BAF56708018C8CB055003CF168209312D00FA0212CB6ACB1FCB3FC98100A0FB0000FA01D430ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FD43009F2E3EB53A6C705F2E191544540525BF001F2E3EA22F811F8235003A128B6085331A8018102A3AA1AA984067007A116B609F8237FC8CA0058FA025005CF1613CBFFCB3FCB3F58FA0213CB1F12CB1FCCC9ED54708018C8CB0558CF16CB6EC98042FB000201200F100011BEE6576A2686B8500402012011120033B9241ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FF00380017B6E4F0402A483DA87B0D9430001BB7CA50402A483DA87B0B664D8A70} B>boc PUSHREF ";
10+
811

912
slice calculate_address_by_stateinit(cell state_init) {
1013
return begin_cell().store_uint(4, 3)
@@ -67,7 +70,7 @@ cell build_storage_contract_stateinit(int merkle_hash, int file_size, int rate_p
6770
.store_coins(0)
6871
.store_uint(4 + 2, 1 + 4 + 4 + 64 + 32 + 1 + 1 + 1)
6972
.store_ref(state_init)
70-
.store_uint(op::offer_storage_contract, 32)
73+
.store_uint(op::deploy_storage_contract, 32)
7174
.store_uint(query_id, 64)
7275
.end_cell();
7376
send_raw_message(msg, 64);

storage/storage-daemon/smartcont/storage-provider.fif

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ PROGRAM{
5252
STREF // _33
5353
ENDC // data
5454
0 PUSHINT // data _36=0
55-
"storage-contract-code.boc" file>B B>boc PUSHREF // data _36=0 _37
55+
B{B5EE9C72010213010002FD000114FF00F4A413F4BCF2C80B0102016202030202CE04050201200D0E020120060700115D74CD0FA40D3FF30804E1007434C0C05C6C2497C0F83E900C0871C023A0D6F6CF380074C7C8700023A117C0F6CF3834CFC8A084391D237C6EA3AD4120829896802876CF3B51343C00E0842FDEF4305C20063232C1540133C5A0824C4B403E8084F2DA84B2C7D48832CFF2FFF25C3EC0244D388860841E8D85A22EA008080809006F35CE6CE4D7C11C3834C1C070C0E4D7C11C3834FFC12F64D7C0DC3800B50C1C25A010086B092E64693A0CC06AC140BD039BE84C645FF81C20002CED44D0D200FA0003A001C8CA0001FA0201CF16C9ED5403E68E4FED44D0D200FA00FA4003B3F2E3EF5350C705F2E1917FC8CA0058FA0201CF1621CF16C9ED54F003F8258210D4CAEDCD708018C8CB055005CF168209312D00FA0214CB6A13CB1F12CB3FCBFFC970FB00DE21821079F937EABAE30221821046ED2E94BA9130E30D8210419D5D4DBA915BE30D0A0B0C00EA10235F03ED44D0D200FA00FA40F0035352C7055162C70516B1F2E191F8258210B6236D63708018C8CB055004CF165005FA0212CB6A13CB1F12CB3F5230CBFFC902B39730318100A0FB00E0018040FB00F8258210B6236D63708018C8CB055004CF1623FA0213CB6A12CB1FCB3FCBFFC98100A0FB000092ED44D0D200FA00FA403002F2E3EB5341C705F2E19120C200998208989680A072FB029130E28210A91BAF56708018C8CB055003CF168209312D00FA0212CB6ACB1FCB3FC98100A0FB0000FA01D430ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FD43009F2E3EB53A6C705F2E191544540525BF001F2E3EA22F811F8235003A128B6085331A8018102A3AA1AA984067007A116B609F8237FC8CA0058FA025005CF1613CBFFCB3FCB3F58FA0213CB1F12CB1FCCC9ED54708018C8CB0558CF16CB6EC98042FB000201200F100011BEE6576A2686B8500402012011120033B9241ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FF00380017B6E4F0402A483DA87B0D9430001BB7CA50402A483DA87B0B664D8A70} B>boc PUSHREF // data _36=0 _37
5656
OVER // data _36=0 _37 _38=0
5757
NEWC // data _36=0 _37 _38=0 _39
5858
2 STU // data _36=0 _37 _41
@@ -93,26 +93,27 @@ PROGRAM{
9393
s1 s5 XCHG
9494
s1 s6 XCHG // query_id merkle_hash file_size rate_per_mb_day max_span client torrent_hash
9595
build_storage_contract_stateinit CALLDICT // query_id state_init
96-
276580847 PUSHINT // query_id state_init _54=276580847
97-
6 PUSHINT // query_id state_init _54=276580847 _57
98-
24 PUSHINT // query_id state_init _54=276580847 _57 _58=24
99-
NEWC // query_id state_init _54=276580847 _57 _58=24 _59
100-
6 STU // query_id state_init _54=276580847 _57 _61
101-
s3 PUSH // query_id state_init _54=276580847 _57 _61 state_init
102-
calculate_address_by_stateinit CALLDICT // query_id state_init _54=276580847 _57 _61 _62
103-
STSLICER // query_id state_init _54=276580847 _57 _63
104-
0 PUSHINT // query_id state_init _54=276580847 _57 _63 _64=0
105-
STGRAMS // query_id state_init _54=276580847 _57 _65
106-
108 STU // query_id state_init _54=276580847 _81
107-
s1 s2 XCHG // query_id _54=276580847 state_init _81
108-
STREF // query_id _54=276580847 _82
96+
3832843761 PUSHINT // query_id state_init _54=3832843761
97+
6 PUSHINT // query_id state_init _54=3832843761 _57
98+
24 PUSHINT // query_id state_init _54=3832843761 _57 _58=24
99+
NEWC // query_id state_init _54=3832843761 _57 _58=24 _59
100+
6 STU // query_id state_init _54=3832843761 _57 _61
101+
s3 PUSH // query_id state_init _54=3832843761 _57 _61 state_init
102+
calculate_address_by_stateinit CALLDICT // query_id state_init _54=3832843761 _57 _61 _62
103+
STSLICER // query_id state_init _54=3832843761 _57 _63
104+
0 PUSHINT // query_id state_init _54=3832843761 _57 _63 _64=0
105+
STGRAMS // query_id state_init _54=3832843761 _57 _65
106+
108 STU // query_id state_init _54=3832843761 _81
107+
s1 s2 XCHG // query_id _54=3832843761 state_init _81
108+
STREF // query_id _54=3832843761 _82
109109
32 STU // query_id _84
110110
64 STU // _86
111111
ENDC // msg
112112
64 PUSHINT // msg _88=64
113113
SENDRAWMSG
114114
}>
115115
recv_internal PROC:<{
116+
c2 SAVE
116117
SAMEALTSAVE // msg_value in_msg_full in_msg_body
117118
SWAP // msg_value in_msg_body in_msg_full
118119
CTOS // msg_value in_msg_body cs

0 commit comments

Comments
 (0)