1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-15 04:32:21 +00:00
ton/crypto/func/auto-tests/legacy_tests/whales-nominators/proxy.fc

67 lines
1.7 KiB
Text
Raw Normal View History

(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);
}