2020-04-23 23:29:22 +04:00

572 lines
38 KiB
Plaintext

// automatically generated from `smartcont/stdlib.fc` `smartcont/payment-channel-code.fc`
PROGRAM{
DECLPROC unpack_data
DECLPROC pack_data
DECLPROC unpack_config
DECLPROC unwrap_signatures
DECLPROC unpack_state_init
DECLPROC pack_state_init
DECLPROC unpack_state_close
DECLPROC pack_state_close
DECLPROC send_payout
DECLPROC do_payout
DECLPROC with_init
DECLPROC with_close
DECLPROC recv_any
DECLPROC recv_internal
DECLPROC recv_external
unpack_data PROCREF:<{
//
c4 PUSH // _1
CTOS // cs
LDREF // _4 cs
LDREF // res res cs
ENDS
}>
pack_data PROCREF:<{
// config state
SWAP
NEWC // state config _2
STREF // state _3
STREF // _4
ENDC // _5
c4 POP
}>
unpack_config PROC:<{
// config
CTOS // cs
32 LDU // _4 cs
32 LDU // _4 _7 cs
256 LDU // _4 _7 _10 cs
256 LDU // _4 _7 _10 _13 cs
LDREF // _4 _7 _10 _13 _16 cs
SWAP // _4 _7 _10 _13 cs _16
CTOS // _4 _7 _10 _13 cs _18
SWAP // _4 _7 _10 _13 _18 cs
LDREF // _4 _7 _10 _13 _18 _19 cs
SWAP // _4 _7 _10 _13 _18 cs _19
CTOS // _4 _7 _10 _13 _18 cs _21
SWAP // _4 _7 _10 _13 _18 _21 cs
64 LDU // res res res res res res res cs
ENDS
}>
unwrap_signatures PROC:<{
// cs a_key b_key
s0 s2 XCHG // b_key a_key cs
1 LDI // b_key a_key a? cs
s0 s1 PUSH2 // b_key a_key a? cs a_sig a?
IF:<{ // b_key a_key a? cs a_sig
DROP // b_key a_key a? cs
LDREF // b_key a_key a? _8 cs
SWAP // b_key a_key a? cs _8
CTOS // b_key a_key a? cs _10
9 PUSHPOW2 // b_key a_key a? cs _10 _11=512
PLDSLICEX // b_key a_key a? cs a_sig
}> // b_key a_key a? cs a_sig
SWAP // b_key a_key a? a_sig cs
1 LDI // b_key a_key a? a_sig b? cs
s0 s1 PUSH2 // b_key a_key a? a_sig b? cs b_sig b?
IF:<{ // b_key a_key a? a_sig b? cs b_sig
DROP // b_key a_key a? a_sig b? cs
LDREF // b_key a_key a? a_sig b? _18 cs
SWAP // b_key a_key a? a_sig b? cs _18
CTOS // b_key a_key a? a_sig b? cs _20
9 PUSHPOW2 // b_key a_key a? a_sig b? cs _20 _21=512
PLDSLICEX // b_key a_key a? a_sig b? cs b_sig
}> // b_key a_key a? a_sig b? cs b_sig
OVER // b_key a_key a? a_sig b? cs b_sig cs
HASHSU // b_key a_key a? a_sig b? cs b_sig hash
s5 PUSH // b_key a_key a? a_sig b? cs b_sig hash a?
IF:<{ // b_key a_key a? a_sig b? cs b_sig hash
31 PUSHINT // b_key a_key a? a_sig b? cs b_sig hash _25
s1 s5 s7 PUXC2 // b_key hash a? _25 b? cs b_sig hash a_sig a_key
CHKSIGNU // b_key hash a? _25 b? cs b_sig _26
s1 s4 XCHG // b_key hash a? b_sig b? cs _25 _26
THROWANYIFNOT
s2 s4 XCHG // b_key b_sig a? hash b? cs
}>ELSE<{
s4 POP
s5 POP // b_key b_sig a? hash b? cs
}>
OVER // b_key b_sig a? hash b? cs b?
IF:<{ // b_key b_sig a? hash b? cs
32 PUSHINT // b_key b_sig a? hash b? cs _28
s3 s5 s6 XCHG3 // _28 cs a? b? hash b_sig b_key
CHKSIGNU // _28 cs a? b? _29
s1 s4 XCHG // b? cs a? _28 _29
THROWANYIFNOT
s1 s2 XCHG // cs b? a?
}>ELSE<{
s5 POP
s3 POP
DROP // cs b? a?
}>
SWAP // cs a? b?
}>
unpack_state_init PROC:<{
// state
1 LDI // _1 state
1 LDI // _1 _4 state
LDGRAMS // _1 _4 _7 state
LDGRAMS // _1 _4 _7 _9 state
32 LDU // _1 _4 _7 _9 _11 state
LDGRAMS // _1 _4 _7 _9 _11 _14 state
LDGRAMS // _1 _4 _7 _9 _11 _14 _31 _30
DROP // _1 _4 _7 _9 _11 _14 _16
}>
pack_state_init PROC:<{
// signed_A? signed_B? min_A min_B expire_at A B
0 PUSHINT // signed_A? signed_B? min_A min_B expire_at A B _7
NEWC // signed_A? signed_B? min_A min_B expire_at A B _7 _8
3 STI // signed_A? signed_B? min_A min_B expire_at A B _10
s1 s7 XCHG // B signed_B? min_A min_B expire_at A signed_A? _10
1 STI // B signed_B? min_A min_B expire_at A _12
s1 s5 XCHG // B A min_A min_B expire_at signed_B? _12
1 STI // B A min_A min_B expire_at _14
s0 s3 XCHG2 // B A expire_at min_B _14 min_A
STGRAMS // B A expire_at min_B _15
SWAP // B A expire_at _15 min_B
STGRAMS // B A expire_at _16
32 STU // B A _18
SWAP // B _18 A
STGRAMS // B _19
SWAP // _19 B
STGRAMS // _20
ENDC // _21
}>
unpack_state_close PROC:<{
// state
1 LDI // _1 state
1 LDI // _1 _4 state
LDGRAMS // _1 _4 _7 state
LDGRAMS // _1 _4 _7 _9 state
32 LDU // _1 _4 _7 _9 _11 state
LDGRAMS // _1 _4 _7 _9 _11 _14 state
LDGRAMS // _1 _4 _7 _9 _11 _14 _31 _30
DROP // _1 _4 _7 _9 _11 _14 _16
}>
pack_state_close PROC:<{
// signed_A? signed_B? promise_A promise_B expire_at A B
1 PUSHINT // signed_A? signed_B? promise_A promise_B expire_at A B _7
NEWC // signed_A? signed_B? promise_A promise_B expire_at A B _7 _8
3 STI // signed_A? signed_B? promise_A promise_B expire_at A B _10
s1 s7 XCHG // B signed_B? promise_A promise_B expire_at A signed_A? _10
1 STI // B signed_B? promise_A promise_B expire_at A _12
s1 s5 XCHG // B A promise_A promise_B expire_at signed_B? _12
1 STI // B A promise_A promise_B expire_at _14
s0 s3 XCHG2 // B A expire_at promise_B _14 promise_A
STGRAMS // B A expire_at promise_B _15
SWAP // B A expire_at _15 promise_B
STGRAMS // B A expire_at _16
32 STU // B A _18
SWAP // B _18 A
STGRAMS // B _19
SWAP // _19 B
STGRAMS // _20
ENDC // _21
}>
send_payout PROC:<{
// s_addr amount channel_id flags
0x37fe7810 PUSHINT // s_addr amount channel_id flags _4
0 PUSHINT // s_addr amount channel_id flags _4 _5=0
16 PUSHINT // s_addr amount channel_id flags _4 _5=0 _6=16
NEWC // s_addr amount channel_id flags _4 _5=0 _6=16 _7
6 STU // s_addr amount channel_id flags _4 _5=0 _9
s0 s6 XCHG2 // _5=0 amount channel_id flags _4 _9 s_addr
STSLICER // _5=0 amount channel_id flags _4 _10
s0 s4 XCHG2 // _5=0 _4 channel_id flags _10 amount
STGRAMS // _5=0 _4 channel_id flags _11
s1 s4 XCHG // flags _4 channel_id _5=0 _11
107 STU // flags _4 channel_id _25
s1 s2 XCHG // flags channel_id _4 _25
32 STU // flags channel_id _27
64 STU // flags _29
ENDC // flags _30
SWAP // _30 flags
SENDRAWMSG
}>
do_payout PROC:<{
// promise_A promise_B A B a_addr b_addr channel_id
ACCEPT
s5 s6 XCHG2 // channel_id b_addr A B a_addr promise_B promise_A
SUB // channel_id b_addr A B a_addr diff
s3 PUSH // channel_id b_addr A B a_addr diff A
NEGATE // channel_id b_addr A B a_addr diff _10
s1 s(-1) PUXC // channel_id b_addr A B a_addr diff diff _10
LESS // channel_id b_addr A B a_addr diff _11
IF:<{ // channel_id b_addr A B a_addr diff
DROP // channel_id b_addr A B a_addr
s2 PUSH // channel_id b_addr A B a_addr A
NEGATE // channel_id b_addr A B a_addr diff
}> // channel_id b_addr A B a_addr diff
s0 s2 PUSH2 // channel_id b_addr A B a_addr diff diff B
GREATER // channel_id b_addr A B a_addr diff _13
IF:<{ // channel_id b_addr A B a_addr diff
DROP // channel_id b_addr A B a_addr
OVER // channel_id b_addr A B a_addr diff
}> // channel_id b_addr A B a_addr diff
s3 s3 XCPU // channel_id b_addr diff B a_addr A diff
ADD // channel_id b_addr diff B a_addr A
s2 s3 XCHG2 // channel_id b_addr A a_addr B diff
SUB // channel_id b_addr A a_addr B
s1 s2 s4 XCPU2
3 PUSHINT // channel_id b_addr A B a_addr A channel_id _16=3
send_payout CALLDICT
s2 s0 s3 XCPUXC
3 PUSHINT // B A b_addr B channel_id _18=3
send_payout CALLDICT
2 PUSHINT // B A _20
NEWC // B A _20 _21
3 STI // B A _23
SWAP // B _23 A
STGRAMS // B _24
SWAP // _24 B
STGRAMS // _25
ENDC // _26
}>
with_init PROC:<{
// state msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout channel_id
s0 s8 XCHG // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout state
unpack_state_init CALLDICT // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout signed_A? signed_B? min_A min_B expire_at A B
s2 PUSH // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout signed_A? signed_B? min_A min_B expire_at A B expire_at
0 EQINT // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout signed_A? signed_B? min_A min_B expire_at A B _18
IF:<{ // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout signed_A? signed_B? min_A min_B expire_at A B
s2 POP // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout signed_A? signed_B? min_A min_B B A
NOW // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout signed_A? signed_B? min_A min_B B A _19
s0 s7 XCHG2 // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr A signed_A? signed_B? min_A min_B B _19 init_timeout
ADD // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr A signed_A? signed_B? min_A min_B B expire_at
s0 s6 XCHG2 // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at A
}>ELSE<{
s7 POP // channel_id msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at A
}>
s0 s11 XCHG // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at msg
32 LDU // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg
0x43278a28 PUSHINT // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg _25
s2 s(-1) PUXC // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg op _25
EQUAL // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg _26
IFJMP:<{ // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg
s2 s6 XCHG
6 BLKDROP
s4 POP
s4 POP
s5 POP // channel_id b_addr A B expire_at a_addr
35 PUSHINT // channel_id b_addr A B expire_at a_addr _27
s0 s2 XCHG
NOW // channel_id b_addr A B _27 a_addr expire_at _28
LESS // channel_id b_addr A B _27 a_addr _29
s1 s2 XCHG // channel_id b_addr A B a_addr _27 _29
THROWANYIFNOT
0 PUSHINT // channel_id b_addr A B a_addr _31=0
s4 s4 XCPU
s0 s6 XCHG // _31=0 _32=0 A B a_addr b_addr channel_id
do_payout CALLDICT // _33
}> // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg
36 PUSHINT // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg _34
0x27317822 PUSHINT // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at op msg _34 _35
s1 s3 XCHG // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at _34 msg op _35
EQUAL // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at _34 msg _36
s1 s2 XCHG // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at msg _34 _36
THROWANYIFNOT
LDGRAMS // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at _43 msg
LDGRAMS // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at _43 _45 msg
LDGRAMS // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at _43 _45 _47 msg
LDGRAMS // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at _43 _45 _47 _49 msg
64 LDU // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at _43 _45 _47 _49 _104 _103
DROP // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B got_channel_id
39 PUSHINT // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B got_channel_id _54
SWAP
18 s() PUSH // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B _54 got_channel_id channel_id
EQUAL // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B _54 _55
THROWANYIFNOT
33 PUSHINT // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B _57
s4 s3 PUSH2 // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B _57 inc_A inc_B
ADD // channel_id msg_value A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B _57 _58
s1 17 s() XCHG // channel_id _57 A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B msg_value _58
LESS // channel_id _57 A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A upd_min_B _59
s1 16 s() XCHG // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A _57 _59
THROWANYIF
34 PUSHINT // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A _61
s13 s8 PUSH2 // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A _61 msg_signed_A? signed_A?
LESS // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A _61 _62
s13 s8 PUSH2 // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A _61 _62 msg_signed_B? signed_B?
LESS // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A _61 _62 _63
OR // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at inc_A inc_B upd_min_A _61 _64
THROWANYIFNOT
s13 s2 XCHG2 // channel_id upd_min_B inc_B msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at upd_min_A A inc_A
ADD // channel_id upd_min_B inc_B msg_signed_A? msg_signed_B? a_addr b_addr B signed_A? signed_B? min_A min_B expire_at upd_min_A A
s7 s12 XCHG2 // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr upd_min_A signed_A? signed_B? min_A min_B expire_at B inc_B
ADD // channel_id upd_min_B A msg_signed_A? msg_signed_B? a_addr b_addr upd_min_A signed_A? signed_B? min_A min_B expire_at B
s5 s10 XCHG2 // channel_id upd_min_B A B msg_signed_B? a_addr b_addr upd_min_A expire_at signed_B? min_A min_B signed_A? msg_signed_A?
OR // channel_id upd_min_B A B msg_signed_B? a_addr b_addr upd_min_A expire_at signed_B? min_A min_B signed_A?
s2 s5 PUSH2 // channel_id upd_min_B A B msg_signed_B? a_addr b_addr upd_min_A expire_at signed_B? min_A min_B signed_A? min_A upd_min_A
LESS // channel_id upd_min_B A B msg_signed_B? a_addr b_addr upd_min_A expire_at signed_B? min_A min_B signed_A? _69
IF:<{ // channel_id upd_min_B A B msg_signed_B? a_addr b_addr upd_min_A expire_at signed_B? min_A min_B signed_A?
s2 POP // channel_id upd_min_B A B msg_signed_B? a_addr b_addr min_A expire_at signed_B? signed_A? min_B
s1 s4 XCHG // channel_id upd_min_B A B msg_signed_B? a_addr b_addr signed_A? expire_at signed_B? min_A min_B
}>ELSE<{
s5 POP // channel_id upd_min_B A B msg_signed_B? a_addr b_addr signed_A? expire_at signed_B? min_A min_B
}>
s2 s7 XCHG2 // channel_id upd_min_B A B min_B a_addr b_addr signed_A? expire_at min_A signed_B? msg_signed_B?
OR // channel_id upd_min_B A B min_B a_addr b_addr signed_A? expire_at min_A signed_B?
s6 s9 PUSH2 // channel_id upd_min_B A B min_B a_addr b_addr signed_A? expire_at min_A signed_B? min_B upd_min_B
LESS // channel_id upd_min_B A B min_B a_addr b_addr signed_A? expire_at min_A signed_B? _71
IF:<{ // channel_id upd_min_B A B min_B a_addr b_addr signed_A? expire_at min_A signed_B?
s6 POP // channel_id min_B A B signed_B? a_addr b_addr signed_A? expire_at min_A
s5 s8 XCHG // channel_id signed_B? A B min_B a_addr b_addr signed_A? expire_at min_A
}>ELSE<{
s9 POP // channel_id signed_B? A B min_B a_addr b_addr signed_A? expire_at min_A
}>
s2 s8 PUSH2 // channel_id signed_B? A B min_B a_addr b_addr signed_A? expire_at min_A signed_A? signed_B?
AND // channel_id signed_B? A B min_B a_addr b_addr signed_A? expire_at min_A _72
IFJMP:<{ // channel_id signed_B? A B min_B a_addr b_addr signed_A? expire_at min_A
s8 POP
2DROP // channel_id min_A A B min_B a_addr b_addr
s5 s4 XCPU // channel_id b_addr A B min_B a_addr min_A A
GREATER // channel_id b_addr A B min_B a_addr _73
s2 s3 XCPU // channel_id b_addr A B _73 a_addr min_B B
GREATER // channel_id b_addr A B _73 a_addr _74
s1 s2 XCHG // channel_id b_addr A B a_addr _73 _74
OR // channel_id b_addr A B a_addr _75
IFJMP:<{ // channel_id b_addr A B a_addr
0 PUSHINT // channel_id b_addr A B a_addr _76=0
s4 s4 XCPU
s0 s6 XCHG // _76=0 _77=0 A B a_addr b_addr channel_id
do_payout CALLDICT // _78
}> // channel_id b_addr A B a_addr
DROP
2 2 BLKDROP2 // A B
0 PUSHINT // A B _79=0
s0 s0 s0 PUSH3 // A B _79=0 _80=0 _81=0 _82=0
DUP // A B _79=0 _80=0 _81=0 _82=0 _83=0
2 5 BLKSWAP // _79=0 _80=0 _81=0 _82=0 _83=0 A B
pack_state_close CALLDICT // _84
}> // channel_id signed_B? A B min_B a_addr b_addr signed_A? expire_at min_A
s3 POP
s3 POP
s7 POP // signed_A? signed_B? A B min_B expire_at min_A
s1 s4 s4 XCHG3
s0 s3 XCHG // signed_A? signed_B? min_A min_B expire_at A B
pack_state_init CALLDICT // _85
}>
with_close PROC:<{
// cs msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout channel_id
s0 s9 XCHG // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout cs
unpack_state_close CALLDICT // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout signed_A? signed_B? promise_A promise_B expire_at A B
s2 PUSH // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout signed_A? signed_B? promise_A promise_B expire_at A B expire_at
0 EQINT // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout signed_A? signed_B? promise_A promise_B expire_at A B _19
IF:<{ // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout signed_A? signed_B? promise_A promise_B expire_at A B
s2 POP // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout signed_A? signed_B? promise_A promise_B B A
NOW // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr expire_timeout signed_A? signed_B? promise_A promise_B B A _20
s0 s7 XCHG2 // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr A signed_A? signed_B? promise_A promise_B B _20 expire_timeout
ADD // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr A signed_A? signed_B? promise_A promise_B B expire_at
s0 s6 XCHG2 // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at A
}>ELSE<{
s7 POP // channel_id msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at A
}>
s0 s13 XCHG // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg
32 LDU // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg
0x43278a28 PUSHINT // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg _26
s2 s(-1) PUXC // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg op _26
EQUAL // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg _27
IFJMP:<{ // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg
2DROP
s3 POP
s3 POP
s6 POP
s6 POP
s6 POP
s6 POP // channel_id A B promise_B expire_at promise_A a_addr b_addr
35 PUSHINT // channel_id A B promise_B expire_at promise_A a_addr b_addr _28
s0 s4 XCHG
NOW // channel_id A B promise_B _28 promise_A a_addr b_addr expire_at _29
LESS // channel_id A B promise_B _28 promise_A a_addr b_addr _30
s1 s4 XCHG // channel_id A B promise_B b_addr promise_A a_addr _28 _30
THROWANYIFNOT
s1 s6 XCHG
s3 s5 XCHG
s3 s4 XCHG
-ROT // promise_A promise_B A B a_addr b_addr channel_id
do_payout CALLDICT // _32
}> // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg
37 PUSHINT // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg _33
0xf28ae183 PUSHINT // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at op msg _33 _34
s1 s3 XCHG // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at _33 msg op _34
EQUAL // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at _33 msg _35
s1 s2 XCHG // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg _33 _35
THROWANYIFNOT
34 PUSHINT // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg _37
s13 s6 PUSH2 // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg _37 msg_signed_A? signed_A?
LESS // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg _37 _38
s13 s6 PUSH2 // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg _37 _38 msg_signed_B? signed_B?
LESS // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg _37 _38 _39
OR // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_A? signed_B? promise_A promise_B expire_at msg _37 _40
THROWANYIFNOT
s5 s12 XCPU // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B msg signed_B? promise_A promise_B expire_at signed_A? msg_signed_A?
OR // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B msg signed_B? promise_A promise_B expire_at signed_A?
s4 s11 XCPU // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B msg signed_A? promise_A promise_B expire_at signed_B? msg_signed_B?
OR // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B msg signed_A? promise_A promise_B expire_at signed_B?
s0 s5 XCHG // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at msg
LDGRAMS // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at _46 msg
LDGRAMS // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg
1 LDI // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B has_sig msg
SWAP // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg has_sig
IF:<{ // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg
LDREF // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B _55 msg
SWAP // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg _55
CTOS // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg _57
9 PUSHPOW2 // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg _57 _58=512
PLDSLICEX // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg sig
OVER // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg sig msg
HASHSU // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg sig hash
s0 16 s() XCHG // channel_id A hash msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg sig msg_signed_A?
IFNOT:<{ // channel_id A hash msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg sig
s3 POP // channel_id A hash msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at sig extra_B msg
31 PUSHINT // channel_id A hash msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at sig extra_B msg _62
s15 s3 s13 PU2XC // channel_id A hash msg_signed_B? _62 b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at sig extra_B msg hash sig a_key
CHKSIGNU // channel_id A hash msg_signed_B? _62 b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at sig extra_B msg _63
s1 s13 XCHG // channel_id A hash msg_signed_B? msg b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at sig extra_B _62 _63
THROWANYIFNOT
s1 s11 XCHG
0 PUSHINT
s0 s2 XCHG // channel_id A hash msg_signed_B? sig b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A=0 extra_B msg
}>ELSE<{
s13 POP // channel_id A hash msg_signed_B? sig b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg
}>
s0 s13 XCHG // channel_id A hash msg sig b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg_signed_B?
IFNOT:<{ // channel_id A hash msg sig b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B
DROP // channel_id A hash msg sig b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A
32 PUSHINT // channel_id A hash msg sig b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A _66
s13 s11 s10 XCHG3 // channel_id A expire_at msg extra_A _66 a_addr b_addr B signed_B? signed_A? promise_A promise_B hash sig b_key
CHKSIGNU // channel_id A expire_at msg extra_A _66 a_addr b_addr B signed_B? signed_A? promise_A promise_B _67
s1 s8 XCHG // channel_id A expire_at msg extra_A promise_B a_addr b_addr B signed_B? signed_A? promise_A _66 _67
THROWANYIFNOT
0 PUSHINT // channel_id A expire_at msg extra_A promise_B a_addr b_addr B signed_B? signed_A? promise_A extra_B=0
s0 s7 XCHG // channel_id A expire_at msg extra_A extra_B=0 a_addr b_addr B signed_B? signed_A? promise_A promise_B
}>ELSE<{
s2 s13 XCHG
s10 POP
s10 POP
DROP // channel_id A expire_at msg extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A promise_B
}>
}>ELSE<{ // channel_id A msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr B signed_B? signed_A? promise_A promise_B expire_at extra_A extra_B msg
s11 POP
2DROP
s9 POP // channel_id A msg_signed_A? msg_signed_B? expire_at msg a_addr b_addr B signed_B? signed_A? promise_A promise_B
38 PUSHINT // channel_id A msg_signed_A? msg_signed_B? expire_at msg a_addr b_addr B signed_B? signed_A? promise_A promise_B _70
s11 s10 XCHG2 // channel_id A promise_B _70 expire_at msg a_addr b_addr B signed_B? signed_A? promise_A msg_signed_A? msg_signed_B?
AND // channel_id A promise_B _70 expire_at msg a_addr b_addr B signed_B? signed_A? promise_A _71
s1 s9 XCHG // channel_id A promise_B promise_A expire_at msg a_addr b_addr B signed_B? signed_A? _70 _71
THROWANYIFNOT
0 PUSHINT // channel_id A promise_B promise_A expire_at msg a_addr b_addr B signed_B? signed_A? extra_A=0
DUP // channel_id A promise_B promise_A expire_at msg a_addr b_addr B signed_B? signed_A? extra_A=0 extra_B=0
s8 s10 XCHG
s0 s7 XCHG
s9 s9 XCHG2
s0 s8 XCHG // channel_id A expire_at msg extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A promise_B
}>
s0 s9 XCHG // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A msg
64 LDU // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A _78 msg
LDGRAMS // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A _78 _81 msg
LDGRAMS // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A _78 _81 _118 _117
DROP // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A got_channel_id update_promise_A update_promise_B
39 PUSHINT // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A got_channel_id update_promise_A update_promise_B _85
s3 s15 XCPU // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A _85 update_promise_A update_promise_B got_channel_id channel_id
EQUAL // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A _85 update_promise_A update_promise_B _86
s1 s3 XCHG // channel_id A expire_at promise_B extra_A extra_B a_addr b_addr B signed_B? signed_A? promise_A update_promise_B update_promise_A _85 _86
THROWANYIFNOT
ACCEPT
s0 s9 XCHG2 // channel_id A expire_at promise_B update_promise_B extra_B a_addr b_addr B signed_B? signed_A? promise_A update_promise_A extra_A
ADD // channel_id A expire_at promise_B update_promise_B extra_B a_addr b_addr B signed_B? signed_A? promise_A update_promise_A
2DUP // channel_id A expire_at promise_B update_promise_B extra_B a_addr b_addr B signed_B? signed_A? promise_A update_promise_A promise_A update_promise_A
LESS // channel_id A expire_at promise_B update_promise_B extra_B a_addr b_addr B signed_B? signed_A? promise_A update_promise_A _90
IF:<{ // channel_id A expire_at promise_B update_promise_B extra_B a_addr b_addr B signed_B? signed_A? promise_A update_promise_A
NIP // channel_id A expire_at promise_B update_promise_B extra_B a_addr b_addr B signed_B? signed_A? promise_A
}>ELSE<{
DROP // channel_id A expire_at promise_B update_promise_B extra_B a_addr b_addr B signed_B? signed_A? promise_A
}>
s7 s6 XCHG2 // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B? update_promise_B extra_B
ADD // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B? update_promise_B
s7 s0 PUSH2 // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B? update_promise_B promise_B update_promise_B
LESS // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B? update_promise_B _92
IF:<{ // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B? update_promise_B
s7 POP // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B?
}>ELSE<{
DROP // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B?
}>
s5 s0 PUSH2 // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B? signed_A? signed_B?
AND // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B? _93
IFJMP:<{ // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B?
DROP
s4 POP
s5 POP // channel_id A b_addr promise_B B promise_A a_addr
s1 s6 XCHG
s3 s5 XCHG
s3 s4 XCHG
s0 s3 s3 XCHG3 // promise_A promise_B A B a_addr b_addr channel_id
do_payout CALLDICT // _94
}> // channel_id A expire_at promise_B signed_A? promise_A a_addr b_addr B signed_B?
2 2 BLKDROP2
s7 POP // signed_B? A expire_at promise_B signed_A? promise_A B
s2 s6 XCHG
s5 s4 s0 XCHG3
s1 s2 XCHG // signed_A? signed_B? promise_A promise_B expire_at A B
pack_state_close CALLDICT // _95
}>
recv_any PROC:<{
// msg_value msg
unpack_data INLINECALLDICT // msg_value msg config state
OVER // msg_value msg config state config
unpack_config CALLDICT // msg_value msg config state init_timeout close_timeout a_key b_key a_addr b_addr channel_id
s9 s4 s3 XCPU2 // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg a_key b_key
unwrap_signatures CALLDICT // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B?
s9 PUSH // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? state
CTOS // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? cs
3 LDU // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? state_type cs
0 PUSHINT // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? state_type cs _23
s2 s(-1) PUXC // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? state_type cs state_type _23
EQUAL // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? state_type cs _24
IF:<{ // msg_value channel_id config state init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? state_type cs
s11 POP // msg_value channel_id config cs init_timeout close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? state_type
s10 s13 s(-1) PUXC2
s4 s3 s(-2) PU2XC
s8 s7 s0 PUSH3
s0 s15 XCHG
18 s() PUSH // state_type channel_id config cs msg_signed_B? close_timeout a_key b_key a_addr b_addr msg msg_signed_A? cs msg_value msg msg_signed_A? msg_signed_B? a_addr b_addr init_timeout channel_id
with_init CALLDICT // state_type channel_id config cs msg_signed_B? close_timeout a_key b_key a_addr b_addr msg msg_signed_A? state
s0 s9 XCHG
s0 s8 XCHG // state_type channel_id config state cs close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B?
}>ELSE<{
s10 POP
s13 POP // state_type channel_id config state cs close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B?
}>
1 PUSHINT // state_type channel_id config state cs close_timeout a_key b_key a_addr b_addr msg msg_signed_A? msg_signed_B? _26
s1 s13 XCHG // msg_signed_B? channel_id config state cs close_timeout a_key b_key a_addr b_addr msg msg_signed_A? state_type _26
EQUAL // msg_signed_B? channel_id config state cs close_timeout a_key b_key a_addr b_addr msg msg_signed_A? _27
IF:<{ // msg_signed_B? channel_id config state cs close_timeout a_key b_key a_addr b_addr msg msg_signed_A?
s8 POP // msg_signed_B? channel_id config msg_signed_A? cs close_timeout a_key b_key a_addr b_addr msg
s6 s9 XCHG
s0 s8 XCHG
s6 s10 XCHG
s4 s5 XCHG
s3 s4 XCHG
s1 s3 s10 XCHG3 // config cs msg msg_signed_A? msg_signed_B? a_key b_key a_addr b_addr close_timeout channel_id
with_close CALLDICT // config state
}>ELSE<{
8 BLKDROP
2 2 BLKDROP2 // config state
}>
pack_data INLINECALLDICT
}>
recv_internal PROC:<{
// msg_value in_msg_cell in_msg
NIP // msg_value in_msg
recv_any CALLDICT
}>
recv_external PROC:<{
// in_msg
0 PUSHINT // in_msg _1=0
SWAP // _1=0 in_msg
recv_any CALLDICT
}>
}END>c