mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-15 04:32:21 +00:00
* Add legacy_tester for existing funC contracts * Add storage-contracts and pragma options
67 lines
No EOL
1.7 KiB
Text
67 lines
No EOL
1.7 KiB
Text
(int) equal_slices (slice s1, slice s2) asm "SDEQ";
|
|
|
|
() recv_internal(cell in_msg_cell, slice in_msg) {
|
|
|
|
;; Parse message
|
|
var cs = in_msg_cell.begin_parse();
|
|
var flags = cs~load_uint(4); ;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool
|
|
slice s_addr = cs~load_msg_addr();
|
|
|
|
;; Parse data
|
|
var ds = get_data().begin_parse();
|
|
slice address_0 = ds~load_msg_addr();
|
|
slice address_1 = ds~load_msg_addr();
|
|
ds~skip_bits(64);
|
|
ds.end_parse();
|
|
|
|
;; Resolve addresses address
|
|
slice src = null();
|
|
slice dst = null();
|
|
if (equal_slices(s_addr, address_0)) {
|
|
src = address_0;
|
|
dst = address_1;
|
|
} elseif (equal_slices(s_addr, address_1)) {
|
|
src = address_1;
|
|
dst = address_0;
|
|
}
|
|
|
|
;; Bounce while keeping storage fee on unknown
|
|
;; Useful fro deploy
|
|
if (null?(src)) {
|
|
raw_reserve(1000000000, 2);
|
|
var msg = begin_cell()
|
|
.store_uint(0x10, 6)
|
|
.store_slice(s_addr)
|
|
.store_grams(0)
|
|
.store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
|
|
.end_cell();
|
|
send_raw_message(msg, 128);
|
|
return ();
|
|
}
|
|
|
|
;; Process messages
|
|
raw_reserve(1000000000, 2);
|
|
var msg = begin_cell()
|
|
.store_uint(flags, 4)
|
|
.store_uint(0, 2)
|
|
.store_slice(dst)
|
|
.store_grams(0)
|
|
.store_uint(0, 1 + 4 + 4 + 64 + 32 + 1);
|
|
|
|
;; Content
|
|
if(msg.builder_bits() + 1 + in_msg.slice_bits() > 1023) {
|
|
msg = msg.store_uint(1,1)
|
|
.store_ref(begin_cell().store_slice(in_msg).end_cell());
|
|
} else {
|
|
msg = msg.store_uint(0,1)
|
|
.store_slice(in_msg);
|
|
}
|
|
|
|
;; Send message
|
|
send_raw_message(msg.end_cell(), 128);
|
|
}
|
|
|
|
() recv_external(slice in_msg) impure {
|
|
;; Do not accept external messages
|
|
throw(72);
|
|
} |