Search by name, SuiNS, address, digest, object ID, coin type or checkpoint.

API

allowance

Module0x0000…0002
Move path
0x0000…0002::allowance
Functions
4027 public, 2 entry
Structs
9
Friend modules
None
allowance

Bytecode1435 lines

The on-chain disassembly. Offsets are bytecode positions within each function.

// Move bytecode v7
module 2.allowance {
use 0000000000000000000000000000000000000000000000000000000000000001::internal;
use 0000000000000000000000000000000000000000000000000000000000000001::option;
use 0000000000000000000000000000000000000000000000000000000000000001::string;
use 0000000000000000000000000000000000000000000000000000000000000001::type_name;
use 0000000000000000000000000000000000000000000000000000000000000001::u64;
use 0000000000000000000000000000000000000000000000000000000000000002::balance;
use 0000000000000000000000000000000000000000000000000000000000000002::clock;
use 0000000000000000000000000000000000000000000000000000000000000002::funds_accumulator;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::protocol_config;
use 0000000000000000000000000000000000000000000000000000000000000002::transfer;
use 0000000000000000000000000000000000000000000000000000000000000002::tx_context;
 
struct AllowanceWithdrawal<phantom Ty0: store> has drop {
allowance: ID,
is_sponsor: bool,
inner: Withdrawal<Ty0>
}
 
struct Allowance<phantom Ty0> has key {
id: UID,
settings: Settings,
current_spend: u256
}
 
struct Settings has drop, store {
funder: address,
spender: Option<address>,
app: Option<TypeName>,
lifetime_cap: Option<u256>,
start_timestamp_ms: Option<u64>,
expiration_timestamp_ms: Option<u64>,
rate_limit: Option<RateLimit>,
name: String
}
 
struct AllowanceCap<phantom Ty0> has key {
id: UID,
allowance: ID
}
 
struct AllowanceProposal<phantom Ty0> has drop {
pos0: Settings
}
 
struct SpendPermit<phantom Ty0> has drop {
dummy_field: bool
}
 
struct SettingsPermit<phantom Ty0> has drop {
dummy_field: bool
}
 
enum RateLimit has copy, drop, store {
Windowed { limit: u256, spent: u256, anchor_ms: Option<u64>, index: u64, window: Window }
}
 
enum Window has copy, drop, store {
PeriodicMs { pos0: u64 },
CalendarMonths { pos0: u8 }
}
 
public spend_permit<Ty0>(Arg0: Permit<Ty0>): SpendPermit<Ty0> {
B0:
0LdFalse
1PackGeneric[0](SpendPermit<Ty0>)
2Ret
}
 
public settings_permit<Ty0>(Arg0: Permit<Ty0>): SettingsPermit<Ty0> {
B0:
0LdFalse
1PackGeneric[1](SettingsPermit<Ty0>)
2Ret
}
 
public periodic_rate_limit(Arg0: u64, Arg1: u256): RateLimit {
L2: loc0: bool
B0:
0CopyLoc[0](Arg0: u64)
1LdU64(0)
2Gt
3BrFalse(9)
B1:
4CopyLoc[1](Arg1: u256)
5LdU256(0)
6Gt
7StLoc[2](loc0: bool)
8Branch(11)
B2:
9LdFalse
10StLoc[2](loc0: bool)
B3:
11MoveLoc[2](loc0: bool)
12BrFalse(14)
B4:
13Branch(16)
B5:
14LdU64(13837029148919201807)
15Abort
B6:
16MoveLoc[1](Arg1: u256)
17MoveLoc[0](Arg0: u64)
18PackVariant(VariantHandleIndex(0))
19Call new_rate_limit(u256, Window): RateLimit
20Ret
}
 
public calendar_rate_limit(Arg0: u8, Arg1: u256): RateLimit {
L2: loc0: bool
B0:
0CopyLoc[0](Arg0: u8)
1LdU8(0)
2Gt
3BrFalse(9)
B1:
4CopyLoc[1](Arg1: u256)
5LdU256(0)
6Gt
7StLoc[2](loc0: bool)
8Branch(11)
B2:
9LdFalse
10StLoc[2](loc0: bool)
B3:
11MoveLoc[2](loc0: bool)
12BrFalse(14)
B4:
13Branch(16)
B5:
14LdU64(13837029183278940175)
15Abort
B6:
16MoveLoc[1](Arg1: u256)
17MoveLoc[0](Arg0: u8)
18PackVariant(VariantHandleIndex(1))
19Call new_rate_limit(u256, Window): RateLimit
20Ret
}
 
public monthly_rate_limit(Arg0: u256): RateLimit {
B0:
0LdU8(1)
1MoveLoc[0](Arg0: u256)
2Call calendar_rate_limit(u8, u256): RateLimit
3Ret
}
 
public quarterly_rate_limit(Arg0: u256): RateLimit {
B0:
0LdU8(3)
1MoveLoc[0](Arg0: u256)
2Call calendar_rate_limit(u8, u256): RateLimit
3Ret
}
 
public yearly_rate_limit(Arg0: u256): RateLimit {
B0:
0LdU8(12)
1MoveLoc[0](Arg0: u256)
2Call calendar_rate_limit(u8, u256): RateLimit
3Ret
}
 
entry new<Ty0>(Arg0: String, Arg1: address, Arg2: Option<u256>, Arg3: Option<u64>, Arg4: Option<u64>, Arg5: Option<RateLimit>, Arg6: &mut TxContext) {
B0:
0CopyLoc[6](Arg6: &mut TxContext)
1FreezeRef
2Call tx_context::sender(&TxContext): address
3MoveLoc[1](Arg1: address)
4Call option::none<TypeName>(): Option<TypeName>
5MoveLoc[2](Arg2: Option<u256>)
6MoveLoc[3](Arg3: Option<u64>)
7MoveLoc[4](Arg4: Option<u64>)
8MoveLoc[5](Arg5: Option<RateLimit>)
9MoveLoc[0](Arg0: String)
10Call new_settings(address, address, Option<TypeName>, Option<u256>, Option<u64>, Option<u64>, Option<RateLimit>, String): Settings
11MoveLoc[6](Arg6: &mut TxContext)
12Call share_new<Ty0>(Settings, &mut TxContext)
13Ret
}
 
entry propose_for_app<Ty0, Ty1>(Arg0: String, Arg1: address, Arg2: Option<u256>, Arg3: Option<u64>, Arg4: Option<u64>, Arg5: Option<RateLimit>, Arg6: &TxContext): AllowanceProposal<Ty0> {
B0:
0MoveLoc[6](Arg6: &TxContext)
1Call tx_context::sender(&TxContext): address
2MoveLoc[1](Arg1: address)
3Call type_name::with_defining_ids<Ty1>(): TypeName
4Call option::some<TypeName>(TypeName): Option<TypeName>
5MoveLoc[2](Arg2: Option<u256>)
6MoveLoc[3](Arg3: Option<u64>)
7MoveLoc[4](Arg4: Option<u64>)
8MoveLoc[5](Arg5: Option<RateLimit>)
9MoveLoc[0](Arg0: String)
10Call new_settings(address, address, Option<TypeName>, Option<u256>, Option<u64>, Option<u64>, Option<RateLimit>, String): Settings
11PackGeneric[2](AllowanceProposal<Ty0>)
12Ret
}
 
public issue<Ty0, Ty1>(Arg0: AllowanceProposal<Ty0>, Arg1: SettingsPermit<Ty1>, Arg2: &mut TxContext) {
L3: loc0: TypeName
L4: loc1: &Option<TypeName>
L5: loc2: Settings
B0:
0MoveLoc[0](Arg0: AllowanceProposal<Ty0>)
1UnpackGeneric[2](AllowanceProposal<Ty0>)
2StLoc[5](loc2: Settings)
3ImmBorrowLoc[5](loc2: Settings)
4ImmBorrowField[0](Settings.app: Option<TypeName>)
5StLoc[4](loc1: &Option<TypeName>)
6Call type_name::with_defining_ids<Ty1>(): TypeName
7StLoc[3](loc0: TypeName)
8MoveLoc[4](loc1: &Option<TypeName>)
9ImmBorrowLoc[3](loc0: TypeName)
10Call option::contains<TypeName>(&Option<TypeName>, &TypeName): bool
11BrFalse(13)
B1:
12Branch(17)
B2:
13MoveLoc[2](Arg2: &mut TxContext)
14Pop
15LdU64(13835340616885731331)
16Abort
B3:
17MoveLoc[5](loc2: Settings)
18MoveLoc[2](Arg2: &mut TxContext)
19Call share_new<Ty0>(Settings, &mut TxContext)
20Ret
}
 
public balance_spend<Ty0>(Arg0: &mut Allowance<Balance<Ty0>>, Arg1: AllowanceWithdrawal<Balance<Ty0>>, Arg2: &Clock, Arg3: &TxContext): Balance<Ty0> {
B0:
0CopyLoc[0](Arg0: &mut Allowance<Balance<Ty0>>)
1ImmBorrowFieldGeneric[0](Allowance.settings: Settings)
2ImmBorrowField[0](Settings.app: Option<TypeName>)
3Call option::is_none<TypeName>(&Option<TypeName>): bool
4BrFalse(6)
B1:
5Branch(14)
B2:
6MoveLoc[0](Arg0: &mut Allowance<Balance<Ty0>>)
7Pop
8MoveLoc[3](Arg3: &TxContext)
9Pop
10MoveLoc[2](Arg2: &Clock)
11Pop
12LdU64(13837592472535040019)
13Abort
B3:
14MoveLoc[0](Arg0: &mut Allowance<Balance<Ty0>>)
15MoveLoc[1](Arg1: AllowanceWithdrawal<Balance<Ty0>>)
16MoveLoc[2](Arg2: &Clock)
17MoveLoc[3](Arg3: &TxContext)
18Call consume<Balance<Ty0>>(&mut Allowance<Balance<Ty0>>, AllowanceWithdrawal<Balance<Ty0>>, &Clock, &TxContext): Withdrawal<Balance<Ty0>>
19Call balance::redeem_funds<Ty0>(Withdrawal<Balance<Ty0>>): Balance<Ty0>
20Ret
}
 
public app_balance_spend<Ty0, Ty1>(Arg0: &mut Allowance<Balance<Ty0>>, Arg1: SpendPermit<Ty1>, Arg2: AllowanceWithdrawal<Balance<Ty0>>, Arg3: &Clock, Arg4: &TxContext): Balance<Ty0> {
B0:
0CopyLoc[0](Arg0: &mut Allowance<Balance<Ty0>>)
1FreezeRef
2Call assert_app<Balance<Ty0>, Ty1>(&Allowance<Balance<Ty0>>)
3MoveLoc[0](Arg0: &mut Allowance<Balance<Ty0>>)
4MoveLoc[2](Arg2: AllowanceWithdrawal<Balance<Ty0>>)
5MoveLoc[3](Arg3: &Clock)
6MoveLoc[4](Arg4: &TxContext)
7Call consume<Balance<Ty0>>(&mut Allowance<Balance<Ty0>>, AllowanceWithdrawal<Balance<Ty0>>, &Clock, &TxContext): Withdrawal<Balance<Ty0>>
8Call balance::redeem_funds<Ty0>(Withdrawal<Balance<Ty0>>): Balance<Ty0>
9Ret
}
 
public revoke<Ty0>(Arg0: AllowanceCap<Ty0>, Arg1: Allowance<Ty0>) {
L2: loc0: ID
L3: loc1: UID
B0:
0MoveLoc[0](Arg0: AllowanceCap<Ty0>)
1UnpackGeneric[3](AllowanceCap<Ty0>)
2StLoc[2](loc0: ID)
3StLoc[3](loc1: UID)
4MoveLoc[2](loc0: ID)
5ImmBorrowLoc[1](Arg1: Allowance<Ty0>)
6ImmBorrowFieldGeneric[1](Allowance.id: UID)
7Call object::uid_to_inner(&UID): ID
8Eq
9BrFalse(11)
B1:
10Branch(13)
B2:
11LdU64(13838155508388069399)
12Abort
B3:
13MoveLoc[1](Arg1: Allowance<Ty0>)
14UnpackGeneric[4](Allowance<Ty0>)
15Pop
16Pop
17Call object::delete(UID)
18MoveLoc[3](loc1: UID)
19Call object::delete(UID)
20Ret
}
 
public rotate_spender<Ty0, Ty1>(Arg0: &mut Allowance<Ty0>, Arg1: SettingsPermit<Ty1>, Arg2: address) {
B0:
0CopyLoc[0](Arg0: &mut Allowance<Ty0>)
1FreezeRef
2Call assert_app<Ty0, Ty1>(&Allowance<Ty0>)
3MoveLoc[2](Arg2: address)
4Call option::some<address>(address): Option<address>
5MoveLoc[0](Arg0: &mut Allowance<Ty0>)
6MutBorrowFieldGeneric[2](Allowance.settings: Settings)
7MutBorrowField[3](Settings.spender: Option<address>)
8WriteRef
9Ret
}
 
public allowance_settings<Ty0>(Arg0: &Allowance<Ty0>): &Settings {
B0:
0MoveLoc[0](Arg0: &Allowance<Ty0>)
1ImmBorrowFieldGeneric[2](Allowance.settings: Settings)
2Ret
}
 
public allowance_current_spend<Ty0>(Arg0: &Allowance<Ty0>): u256 {
B0:
0MoveLoc[0](Arg0: &Allowance<Ty0>)
1ImmBorrowFieldGeneric[3](Allowance.current_spend: u256)
2ReadRef
3Ret
}
 
public allowance_cap_allowance<Ty0>(Arg0: &AllowanceCap<Ty0>): ID {
B0:
0MoveLoc[0](Arg0: &AllowanceCap<Ty0>)
1ImmBorrowFieldGeneric[4](AllowanceCap.allowance: ID)
2ReadRef
3Ret
}
 
public allowance_proposal_settings<Ty0>(Arg0: &AllowanceProposal<Ty0>): &Settings {
B0:
0MoveLoc[0](Arg0: &AllowanceProposal<Ty0>)
1ImmBorrowFieldGeneric[5](AllowanceProposal.pos0: Settings)
2Ret
}
 
public funder(Arg0: &Settings): address {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[7](Settings.funder: address)
2ReadRef
3Ret
}
 
public spender(Arg0: &Settings): Option<address> {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[3](Settings.spender: Option<address>)
2ReadRef
3Ret
}
 
public app(Arg0: &Settings): Option<TypeName> {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[0](Settings.app: Option<TypeName>)
2ReadRef
3Ret
}
 
public lifetime_cap(Arg0: &Settings): Option<u256> {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[8](Settings.lifetime_cap: Option<u256>)
2ReadRef
3Ret
}
 
public start_timestamp_ms(Arg0: &Settings): Option<u64> {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[9](Settings.start_timestamp_ms: Option<u64>)
2ReadRef
3Ret
}
 
public expiration_timestamp_ms(Arg0: &Settings): Option<u64> {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[10](Settings.expiration_timestamp_ms: Option<u64>)
2ReadRef
3Ret
}
 
public rate_limit(Arg0: &Settings): Option<RateLimit> {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[11](Settings.rate_limit: Option<RateLimit>)
2ReadRef
3Ret
}
 
public name(Arg0: &Settings): &String {
B0:
0MoveLoc[0](Arg0: &Settings)
1ImmBorrowField[12](Settings.name: String)
2Ret
}
 
public rate_limit_limit(Arg0: &RateLimit): u256 {
L1: loc0: &RateLimit
L2: loc1: &RateLimit
B0:
0MoveLoc[0](Arg0: &RateLimit)
1StLoc[2](loc1: &RateLimit)
2CopyLoc[2](loc1: &RateLimit)
3StLoc[1](loc0: &RateLimit)
4CopyLoc[1](loc0: &RateLimit)
5VariantSwitch(VariantJumpTableIndex(0))
B1:
6MoveLoc[1](loc0: &RateLimit)
7UnpackVariantImmRef(VariantHandleIndex(2))
8Pop
9Pop
10Pop
11Pop
12Pop
13MoveLoc[2](loc1: &RateLimit)
14UnpackVariantImmRef(VariantHandleIndex(2))
15Pop
16Pop
17Pop
18Pop
19ReadRef
20Ret
Jump tables:
[0]: variant_switch RateLimit {
Variant0 => jump 6
}
}
 
public rate_limit_spent(Arg0: &RateLimit): u256 {
L1: loc0: &RateLimit
L2: loc1: &u256
L3: loc2: &RateLimit
B0:
0MoveLoc[0](Arg0: &RateLimit)
1StLoc[3](loc2: &RateLimit)
2CopyLoc[3](loc2: &RateLimit)
3StLoc[1](loc0: &RateLimit)
4CopyLoc[1](loc0: &RateLimit)
5VariantSwitch(VariantJumpTableIndex(0))
B1:
6MoveLoc[1](loc0: &RateLimit)
7UnpackVariantImmRef(VariantHandleIndex(2))
8Pop
9Pop
10Pop
11Pop
12Pop
13MoveLoc[3](loc2: &RateLimit)
14UnpackVariantImmRef(VariantHandleIndex(2))
15Pop
16Pop
17Pop
18StLoc[2](loc1: &u256)
19Pop
20MoveLoc[2](loc1: &u256)
21ReadRef
22Ret
Jump tables:
[0]: variant_switch RateLimit {
Variant0 => jump 6
}
}
 
public rate_limit_window(Arg0: &RateLimit): Window {
L1: loc0: &RateLimit
L2: loc1: &RateLimit
L3: loc2: &Window
B0:
0MoveLoc[0](Arg0: &RateLimit)
1StLoc[2](loc1: &RateLimit)
2CopyLoc[2](loc1: &RateLimit)
3StLoc[1](loc0: &RateLimit)
4CopyLoc[1](loc0: &RateLimit)
5VariantSwitch(VariantJumpTableIndex(0))
B1:
6MoveLoc[1](loc0: &RateLimit)
7UnpackVariantImmRef(VariantHandleIndex(2))
8Pop
9Pop
10Pop
11Pop
12Pop
13MoveLoc[2](loc1: &RateLimit)
14UnpackVariantImmRef(VariantHandleIndex(2))
15StLoc[3](loc2: &Window)
16Pop
17Pop
18Pop
19Pop
20MoveLoc[3](loc2: &Window)
21ReadRef
22Ret
Jump tables:
[0]: variant_switch RateLimit {
Variant0 => jump 6
}
}
 
public(friend) civil_from_ms(Arg0: u64): u64 * u64 * u64 {
L1: loc0: u64
L2: loc1: u64
L3: loc2: u64
L4: loc3: u64
L5: loc4: u64
L6: loc5: u64
L7: loc6: u64
L8: loc7: u64
L9: loc8: u64
B0:
0MoveLoc[0](Arg0: u64)
1LdConst[37](u64: 8640..)
2Div
3LdU64(719468)
4Add
5StLoc[9](loc8: u64)
6CopyLoc[9](loc8: u64)
7LdU64(146097)
8Div
9StLoc[6](loc5: u64)
10MoveLoc[9](loc8: u64)
11LdU64(146097)
12Mod
13StLoc[4](loc3: u64)
14CopyLoc[4](loc3: u64)
15CopyLoc[4](loc3: u64)
16LdU64(1460)
17Div
18Sub
19CopyLoc[4](loc3: u64)
20LdU64(36524)
21Div
22Add
23CopyLoc[4](loc3: u64)
24LdU64(146096)
25Div
26Sub
27LdU64(365)
28Div
29StLoc[8](loc7: u64)
30MoveLoc[4](loc3: u64)
31LdU64(365)
32CopyLoc[8](loc7: u64)
33Mul
34CopyLoc[8](loc7: u64)
35LdU64(4)
36Div
37Add
38CopyLoc[8](loc7: u64)
39LdU64(100)
40Div
41Sub
42Sub
43StLoc[5](loc4: u64)
44LdU64(5)
45CopyLoc[5](loc4: u64)
46Mul
47LdU64(2)
48Add
49LdU64(153)
50Div
51StLoc[7](loc6: u64)
52MoveLoc[5](loc4: u64)
53LdU64(153)
54CopyLoc[7](loc6: u64)
55Mul
56LdU64(2)
57Add
58LdU64(5)
59Div
60Sub
61LdU64(1)
62Add
63StLoc[3](loc2: u64)
64CopyLoc[7](loc6: u64)
65LdU64(10)
66Lt
67BrFalse(79)
B1:
68MoveLoc[6](loc5: u64)
69LdU64(400)
70Mul
71MoveLoc[8](loc7: u64)
72Add
73MoveLoc[7](loc6: u64)
74LdU64(3)
75Add
76StLoc[2](loc1: u64)
77StLoc[1](loc0: u64)
78Branch(91)
B2:
79MoveLoc[6](loc5: u64)
80LdU64(400)
81Mul
82MoveLoc[8](loc7: u64)
83Add
84LdU64(1)
85Add
86MoveLoc[7](loc6: u64)
87LdU64(9)
88Sub
89StLoc[2](loc1: u64)
90StLoc[1](loc0: u64)
B3:
91MoveLoc[1](loc0: u64)
92MoveLoc[2](loc1: u64)
93MoveLoc[3](loc2: u64)
94Ret
}
 
public(friend) days_in_month(Arg0: u64, Arg1: u64): u64 {
L2: loc0: u64
L3: loc1: u64
L4: loc2: u64
L5: loc3: u64
L6: loc4: u64
L7: loc5: u64
L8: loc6: &u64
L9: loc7: u64
B0:
0MoveLoc[1](Arg1: u64)
1StLoc[9](loc7: u64)
2ImmBorrowLoc[9](loc7: u64)
3StLoc[8](loc6: &u64)
4CopyLoc[8](loc6: &u64)
5ReadRef
6LdU64(2)
7Eq
8BrFalse(22)
B1:
9MoveLoc[8](loc6: &u64)
10Pop
11MoveLoc[0](Arg0: u64)
12Call is_leap_year(u64): bool
13BrFalse(17)
B2:
14LdU64(29)
15StLoc[2](loc0: u64)
16Branch(19)
B3:
17LdU64(28)
18StLoc[2](loc0: u64)
B4:
19MoveLoc[2](loc0: u64)
20StLoc[7](loc5: u64)
21Branch(70)
B5:
22CopyLoc[8](loc6: &u64)
23ReadRef
24LdU64(4)
25Eq
26BrFalse(32)
B6:
27MoveLoc[8](loc6: &u64)
28Pop
29LdU64(30)
30StLoc[6](loc4: u64)
31Branch(68)
B7:
32CopyLoc[8](loc6: &u64)
33ReadRef
34LdU64(6)
35Eq
36BrFalse(42)
B8:
37MoveLoc[8](loc6: &u64)
38Pop
39LdU64(30)
40StLoc[5](loc3: u64)
41Branch(66)
B9:
42CopyLoc[8](loc6: &u64)
43ReadRef
44LdU64(9)
45Eq
46BrFalse(52)
B10:
47MoveLoc[8](loc6: &u64)
48Pop
49LdU64(30)
50StLoc[4](loc2: u64)
51Branch(64)
B11:
52MoveLoc[8](loc6: &u64)
53ReadRef
54LdU64(11)
55Eq
56BrFalse(60)
B12:
57LdU64(30)
58StLoc[3](loc1: u64)
59Branch(62)
B13:
60LdU64(31)
61StLoc[3](loc1: u64)
B14:
62MoveLoc[3](loc1: u64)
63StLoc[4](loc2: u64)
B15:
64MoveLoc[4](loc2: u64)
65StLoc[5](loc3: u64)
B16:
66MoveLoc[5](loc3: u64)
67StLoc[6](loc4: u64)
B17:
68MoveLoc[6](loc4: u64)
69StLoc[7](loc5: u64)
B18:
70MoveLoc[7](loc5: u64)
71Ret
}
 
assert_app<Ty0, Ty1>(Arg0: &Allowance<Ty0>) {
L1: loc0: TypeName
B0:
0Call type_name::with_defining_ids<Ty1>(): TypeName
1StLoc[1](loc0: TypeName)
2MoveLoc[0](Arg0: &Allowance<Ty0>)
3ImmBorrowFieldGeneric[2](Allowance.settings: Settings)
4ImmBorrowField[0](Settings.app: Option<TypeName>)
5ImmBorrowLoc[1](loc0: TypeName)
6Call option::contains<TypeName>(&Option<TypeName>, &TypeName): bool
7BrFalse(9)
B1:
8Branch(11)
B2:
9LdU64(13835341183821414403)
10Abort
B3:
11Ret
}
 
consume<Ty0: store>(Arg0: &mut Allowance<Ty0>, Arg1: AllowanceWithdrawal<Ty0>, Arg2: &Clock, Arg3: &TxContext): Withdrawal<Ty0> {
L4: loc0: address
L5: loc1: &Option<address>
L6: loc2: ID
L7: loc3: u256
L8: loc4: &u64
L9: loc5: Withdrawal<Ty0>
L10: loc6: bool
L11: loc7: &u256
L12: loc8: u64
L13: loc9: &Option<u64>
L14: loc10: &Option<u64>
L15: loc11: &Option<u256>
L16: loc12: &mut Option<RateLimit>
L17: loc13: &u64
B0:
0MoveLoc[1](Arg1: AllowanceWithdrawal<Ty0>)
1UnpackGeneric[5](AllowanceWithdrawal<Ty0>)
2StLoc[9](loc5: Withdrawal<Ty0>)
3StLoc[10](loc6: bool)
4StLoc[6](loc2: ID)
5MoveLoc[10](loc6: bool)
6Not
7BrFalse(9)
B1:
8Branch(17)
B2:
9MoveLoc[0](Arg0: &mut Allowance<Ty0>)
10Pop
11MoveLoc[3](Arg3: &TxContext)
12Pop
13MoveLoc[2](Arg2: &Clock)
14Pop
15LdU64(13839844834990489635)
16Abort
B3:
17MoveLoc[6](loc2: ID)
18CopyLoc[0](Arg0: &mut Allowance<Ty0>)
19ImmBorrowFieldGeneric[1](Allowance.id: UID)
20Call object::uid_to_inner(&UID): ID
21Eq
22BrFalse(24)
B4:
23Branch(32)
B5:
24MoveLoc[0](Arg0: &mut Allowance<Ty0>)
25Pop
26MoveLoc[3](Arg3: &TxContext)
27Pop
28MoveLoc[2](Arg2: &Clock)
29Pop
30LdU64(13836748614540197901)
31Abort
B6:
32CopyLoc[0](Arg0: &mut Allowance<Ty0>)
33ImmBorrowFieldGeneric[2](Allowance.settings: Settings)
34ImmBorrowField[3](Settings.spender: Option<address>)
35StLoc[5](loc1: &Option<address>)
36MoveLoc[3](Arg3: &TxContext)
37Call tx_context::sender(&TxContext): address
38StLoc[4](loc0: address)
39MoveLoc[5](loc1: &Option<address>)
40ImmBorrowLoc[4](loc0: address)
41Call option::contains<address>(&Option<address>, &address): bool
42BrFalse(44)
B7:
43Branch(50)
B8:
44MoveLoc[0](Arg0: &mut Allowance<Ty0>)
45Pop
46MoveLoc[2](Arg2: &Clock)
47Pop
48LdU64(13835059768974114817)
49Abort
B9:
50ImmBorrowLoc[9](loc5: Withdrawal<Ty0>)
51Call funds_accumulator::withdrawal_owner<Ty0>(&Withdrawal<Ty0>): address
52CopyLoc[0](Arg0: &mut Allowance<Ty0>)
53ImmBorrowFieldGeneric[2](Allowance.settings: Settings)
54ImmBorrowField[7](Settings.funder: address)
55ReadRef
56Eq
57BrFalse(59)
B10:
58Branch(65)
B11:
59MoveLoc[0](Arg0: &mut Allowance<Ty0>)
60Pop
61MoveLoc[2](Arg2: &Clock)
62Pop
63LdU64(13837874527332466709)
64Abort
B12:
65ImmBorrowLoc[9](loc5: Withdrawal<Ty0>)
66Call funds_accumulator::withdrawal_limit<Ty0>(&Withdrawal<Ty0>): u256
67StLoc[7](loc3: u256)
68MoveLoc[2](Arg2: &Clock)
69Call clock::timestamp_ms(&Clock): u64
70StLoc[12](loc8: u64)
71CopyLoc[0](Arg0: &mut Allowance<Ty0>)
72ImmBorrowFieldGeneric[2](Allowance.settings: Settings)
73ImmBorrowField[9](Settings.start_timestamp_ms: Option<u64>)
74StLoc[13](loc9: &Option<u64>)
75CopyLoc[13](loc9: &Option<u64>)
76Call option::is_some<u64>(&Option<u64>): bool
77BrFalse(91)
B13:
78MoveLoc[13](loc9: &Option<u64>)
79Call option::borrow<u64>(&Option<u64>): &u64
80StLoc[17](loc13: &u64)
81CopyLoc[12](loc8: u64)
82MoveLoc[17](loc13: &u64)
83ReadRef
84Ge
85BrFalse(87)
B14:
86Branch(93)
B15:
87MoveLoc[0](Arg0: &mut Allowance<Ty0>)
88Pop
89LdU64(13837311598853619729)
90Abort
B16:
91MoveLoc[13](loc9: &Option<u64>)
92Pop
B17:
93CopyLoc[0](Arg0: &mut Allowance<Ty0>)
94ImmBorrowFieldGeneric[2](Allowance.settings: Settings)
95ImmBorrowField[10](Settings.expiration_timestamp_ms: Option<u64>)
96StLoc[14](loc10: &Option<u64>)
97CopyLoc[14](loc10: &Option<u64>)
98Call option::is_some<u64>(&Option<u64>): bool
99BrFalse(113)
B18:
100MoveLoc[14](loc10: &Option<u64>)
101Call option::borrow<u64>(&Option<u64>): &u64
102StLoc[8](loc4: &u64)
103CopyLoc[12](loc8: u64)
104MoveLoc[8](loc4: &u64)
105ReadRef
106Lt
107BrFalse(109)
B19:
108Branch(115)
B20:
109MoveLoc[0](Arg0: &mut Allowance<Ty0>)
110Pop
111LdU64(13835622766172438533)
112Abort
B21:
113MoveLoc[14](loc10: &Option<u64>)
114Pop
B22:
115CopyLoc[0](Arg0: &mut Allowance<Ty0>)
116ImmBorrowFieldGeneric[3](Allowance.current_spend: u256)
117ReadRef
118CopyLoc[7](loc3: u256)
119Add
120CopyLoc[0](Arg0: &mut Allowance<Ty0>)
121MutBorrowFieldGeneric[3](Allowance.current_spend: u256)
122WriteRef
123CopyLoc[0](Arg0: &mut Allowance<Ty0>)
124ImmBorrowFieldGeneric[2](Allowance.settings: Settings)
125ImmBorrowField[8](Settings.lifetime_cap: Option<u256>)
126StLoc[15](loc11: &Option<u256>)
127CopyLoc[15](loc11: &Option<u256>)
128Call option::is_some<u256>(&Option<u256>): bool
129BrFalse(145)
B23:
130MoveLoc[15](loc11: &Option<u256>)
131Call option::borrow<u256>(&Option<u256>): &u256
132StLoc[11](loc7: &u256)
133CopyLoc[0](Arg0: &mut Allowance<Ty0>)
134ImmBorrowFieldGeneric[3](Allowance.current_spend: u256)
135ReadRef
136MoveLoc[11](loc7: &u256)
137ReadRef
138Le
139BrFalse(141)
B24:
140Branch(147)
B25:
141MoveLoc[0](Arg0: &mut Allowance<Ty0>)
142Pop
143LdU64(13835904262624116743)
144Abort
B26:
145MoveLoc[15](loc11: &Option<u256>)
146Pop
B27:
147MoveLoc[0](Arg0: &mut Allowance<Ty0>)
148MutBorrowFieldGeneric[2](Allowance.settings: Settings)
149MutBorrowField[11](Settings.rate_limit: Option<RateLimit>)
150StLoc[16](loc12: &mut Option<RateLimit>)
151CopyLoc[16](loc12: &mut Option<RateLimit>)
152FreezeRef
153Call option::is_some<RateLimit>(&Option<RateLimit>): bool
154BrFalse(161)
B28:
155MoveLoc[16](loc12: &mut Option<RateLimit>)
156Call option::borrow_mut<RateLimit>(&mut Option<RateLimit>): &mut RateLimit
157MoveLoc[7](loc3: u256)
158MoveLoc[12](loc8: u64)
159Call charge(&mut RateLimit, u256, u64)
160Branch(163)
B29:
161MoveLoc[16](loc12: &mut Option<RateLimit>)
162Pop
B30:
163MoveLoc[9](loc5: Withdrawal<Ty0>)
164Ret
}
 
new_rate_limit(Arg0: u256, Arg1: Window): RateLimit {
B0:
0MoveLoc[0](Arg0: u256)
1LdU256(0)
2Call option::none<u64>(): Option<u64>
3LdU64(0)
4MoveLoc[1](Arg1: Window)
5PackVariant(VariantHandleIndex(2))
6Ret
}
 
charge(Arg0: &mut RateLimit, Arg1: u256, Arg2: u64) {
L3: loc0: &mut Option<u64>
L4: loc1: &mut u64
L5: loc2: &RateLimit
L6: loc3: &mut u256
L7: loc4: &mut RateLimit
L8: loc5: &mut Window
L9: loc6: &mut Option<u64>
L10: loc7: u64
L11: loc8: &mut u64
L12: loc9: &mut u256
L13: loc10: &mut u256
L14: loc11: &mut Window
B0:
0MoveLoc[0](Arg0: &mut RateLimit)
1StLoc[7](loc4: &mut RateLimit)
2CopyLoc[7](loc4: &mut RateLimit)
3FreezeRef
4StLoc[5](loc2: &RateLimit)
5CopyLoc[5](loc2: &RateLimit)
6VariantSwitch(VariantJumpTableIndex(0))
B1:
7MoveLoc[5](loc2: &RateLimit)
8UnpackVariantImmRef(VariantHandleIndex(2))
9Pop
10Pop
11Pop
12Pop
13Pop
14MoveLoc[7](loc4: &mut RateLimit)
15UnpackVariantMutRef(VariantHandleIndex(2))
16StLoc[8](loc5: &mut Window)
17StLoc[4](loc1: &mut u64)
18StLoc[3](loc0: &mut Option<u64>)
19StLoc[6](loc3: &mut u256)
20StLoc[12](loc9: &mut u256)
21MoveLoc[6](loc3: &mut u256)
22StLoc[13](loc10: &mut u256)
23MoveLoc[3](loc0: &mut Option<u64>)
24StLoc[9](loc6: &mut Option<u64>)
25MoveLoc[4](loc1: &mut u64)
26StLoc[11](loc8: &mut u64)
27MoveLoc[8](loc5: &mut Window)
28StLoc[14](loc11: &mut Window)
29CopyLoc[9](loc6: &mut Option<u64>)
30FreezeRef
31Call option::is_some<u64>(&Option<u64>): bool
32BrFalse(57)
B2:
33MoveLoc[14](loc11: &mut Window)
34FreezeRef
35MoveLoc[9](loc6: &mut Option<u64>)
36FreezeRef
37Call option::borrow<u64>(&Option<u64>): &u64
38ReadRef
39MoveLoc[2](Arg2: u64)
40Call index_at(&Window, u64, u64): u64
41StLoc[10](loc7: u64)
42CopyLoc[10](loc7: u64)
43CopyLoc[11](loc8: &mut u64)
44ReadRef
45Gt
46BrFalse(54)
B3:
47MoveLoc[10](loc7: u64)
48MoveLoc[11](loc8: &mut u64)
49WriteRef
50LdU256(0)
51CopyLoc[13](loc10: &mut u256)
52WriteRef
53Branch(65)
B4:
54MoveLoc[11](loc8: &mut u64)
55Pop
56Branch(65)
B5:
57MoveLoc[14](loc11: &mut Window)
58Pop
59MoveLoc[11](loc8: &mut u64)
60Pop
61MoveLoc[2](Arg2: u64)
62Call option::some<u64>(u64): Option<u64>
63MoveLoc[9](loc6: &mut Option<u64>)
64WriteRef
B6:
65CopyLoc[13](loc10: &mut u256)
66ReadRef
67MoveLoc[1](Arg1: u256)
68Add
69CopyLoc[13](loc10: &mut u256)
70WriteRef
71MoveLoc[13](loc10: &mut u256)
72ReadRef
73MoveLoc[12](loc9: &mut u256)
74ReadRef
75Le
76BrFalse(78)
B7:
77Branch(80)
B8:
78LdU64(13836185853565075465)
79Abort
B9:
80Ret
Jump tables:
[0]: variant_switch RateLimit {
Variant0 => jump 7
}
}
 
index_at(Arg0: &Window, Arg1: u64, Arg2: u64): u64 {
L3: loc0: u64
L4: loc1: &Window
L5: loc2: &Window
L6: loc3: &u8
L7: loc4: &u64
B0:
0MoveLoc[0](Arg0: &Window)
1StLoc[5](loc2: &Window)
2CopyLoc[5](loc2: &Window)
3StLoc[4](loc1: &Window)
4CopyLoc[4](loc1: &Window)
5VariantSwitch(VariantJumpTableIndex(0))
B1:
6MoveLoc[4](loc1: &Window)
7UnpackVariantImmRef(VariantHandleIndex(0))
8Pop
9MoveLoc[5](loc2: &Window)
10UnpackVariantImmRef(VariantHandleIndex(0))
11StLoc[7](loc4: &u64)
12MoveLoc[2](Arg2: u64)
13MoveLoc[1](Arg1: u64)
14Sub
15MoveLoc[7](loc4: &u64)
16ReadRef
17Div
18StLoc[3](loc0: u64)
19Branch(32)
B2:
20MoveLoc[4](loc1: &Window)
21UnpackVariantImmRef(VariantHandleIndex(1))
22Pop
23MoveLoc[5](loc2: &Window)
24UnpackVariantImmRef(VariantHandleIndex(1))
25StLoc[6](loc3: &u8)
26MoveLoc[1](Arg1: u64)
27MoveLoc[2](Arg2: u64)
28MoveLoc[6](loc3: &u8)
29ReadRef
30Call elapsed_windows(u64, u64, u8): u64
31StLoc[3](loc0: u64)
B3:
32MoveLoc[3](loc0: u64)
33Ret
Jump tables:
[0]: variant_switch Window {
Variant0 => jump 6
Variant1 => jump 20
}
}
 
elapsed_windows(Arg0: u64, Arg1: u64, Arg2: u8): u64 {
L3: loc0: bool
L4: loc1: u64
L5: loc2: u64
L6: loc3: u64
L7: loc4: u64
L8: loc5: u64
L9: loc6: u64
L10: loc7: u64
B0:
0MoveLoc[0](Arg0: u64)
1Call civil_from_ms(u64): u64 * u64 * u64
2StLoc[4](loc1: u64)
3StLoc[5](loc2: u64)
4StLoc[6](loc3: u64)
5MoveLoc[1](Arg1: u64)
6Call civil_from_ms(u64): u64 * u64 * u64
7StLoc[7](loc4: u64)
8StLoc[9](loc6: u64)
9StLoc[10](loc7: u64)
10CopyLoc[10](loc7: u64)
11LdU64(12)
12Mul
13CopyLoc[9](loc6: u64)
14Add
15MoveLoc[6](loc3: u64)
16LdU64(12)
17Mul
18MoveLoc[5](loc2: u64)
19Add
20Sub
21StLoc[8](loc5: u64)
22CopyLoc[8](loc5: u64)
23LdU64(0)
24Gt
25BrFalse(35)
B1:
26MoveLoc[7](loc4: u64)
27MoveLoc[4](loc1: u64)
28MoveLoc[10](loc7: u64)
29MoveLoc[9](loc6: u64)
30Call days_in_month(u64, u64): u64
31Call u64::min(u64, u64): u64
32Lt
33StLoc[3](loc0: bool)
34Branch(37)
B2:
35LdFalse
36StLoc[3](loc0: bool)
B3:
37MoveLoc[3](loc0: bool)
38BrFalse(43)
B4:
39MoveLoc[8](loc5: u64)
40LdU64(1)
41Sub
42StLoc[8](loc5: u64)
B5:
43MoveLoc[8](loc5: u64)
44MoveLoc[2](Arg2: u8)
45CastU64
46Div
47Ret
}
 
is_leap_year(Arg0: u64): bool {
L1: loc0: bool
L2: loc1: bool
B0:
0CopyLoc[0](Arg0: u64)
1LdU64(4)
2Mod
3LdU64(0)
4Eq
5BrFalse(24)
B1:
6CopyLoc[0](Arg0: u64)
7LdU64(100)
8Mod
9LdU64(0)
10Neq
11BrFalse(15)
B2:
12LdTrue
13StLoc[2](loc1: bool)
14Branch(21)
B3:
15MoveLoc[0](Arg0: u64)
16LdU64(400)
17Mod
18LdU64(0)
19Eq
20StLoc[2](loc1: bool)
B4:
21MoveLoc[2](loc1: bool)
22StLoc[1](loc0: bool)
23Branch(26)
B5:
24LdFalse
25StLoc[1](loc0: bool)
B6:
26MoveLoc[1](loc0: bool)
27Ret
}
 
new_settings(Arg0: address, Arg1: address, Arg2: Option<TypeName>, Arg3: Option<u256>, Arg4: Option<u64>, Arg5: Option<u64>, Arg6: Option<RateLimit>, Arg7: String): Settings {
L8: loc0: bool
L9: loc1: bool
L10: loc2: bool
L11: loc3: &Option<u256>
B0:
0LdConst[38](vector<u8>: "ena..)
1Call protocol_config::is_feature_enabled(vector<u8>): bool
2BrFalse(4)
B1:
3Branch(6)
B2:
4LdU64(13839563729380835361)
5Abort
B3:
6ImmBorrowLoc[3](Arg3: Option<u256>)
7Call option::is_some<u256>(&Option<u256>): bool
8BrFalse(12)
B4:
9LdTrue
10StLoc[8](loc0: bool)
11Branch(15)
B5:
12ImmBorrowLoc[6](Arg6: Option<RateLimit>)
13Call option::is_some<RateLimit>(&Option<RateLimit>): bool
14StLoc[8](loc0: bool)
B6:
15MoveLoc[8](loc0: bool)
16BrFalse(18)
B7:
17Branch(20)
B8:
18LdU64(13836467508930543627)
19Abort
B9:
20ImmBorrowLoc[5](Arg5: Option<u64>)
21Call option::is_some<u64>(&Option<u64>): bool
22BrFalse(26)
B10:
23LdTrue
24StLoc[9](loc1: bool)
25Branch(29)
B11:
26ImmBorrowLoc[6](Arg6: Option<RateLimit>)
27Call option::is_some<RateLimit>(&Option<RateLimit>): bool
28StLoc[9](loc1: bool)
B12:
29MoveLoc[9](loc1: bool)
30BrFalse(32)
B13:
31Branch(34)
B14:
32LdU64(13839282262993928223)
33Abort
B15:
34ImmBorrowLoc[7](Arg7: String)
35Call string::length(&String): u64
36LdConst[36](u64: 128)
37Le
38BrFalse(40)
B16:
39Branch(42)
B17:
40LdU64(13838437842358370329)
41Abort
B18:
42ImmBorrowLoc[3](Arg3: Option<u256>)
43StLoc[11](loc3: &Option<u256>)
44CopyLoc[11](loc3: &Option<u256>)
45Call option::is_some<u256>(&Option<u256>): bool
46BrFalse(56)
B19:
47MoveLoc[11](loc3: &Option<u256>)
48Call option::borrow<u256>(&Option<u256>): &u256
49ReadRef
50LdU256(0)
51Gt
52BrFalse(54)
B20:
53Branch(58)
B21:
54LdU64(13838719321630179355)
55Abort
B22:
56MoveLoc[11](loc3: &Option<u256>)
57Pop
B23:
58ImmBorrowLoc[4](Arg4: Option<u64>)
59Call option::is_some<u64>(&Option<u64>): bool
60BrFalse(65)
B24:
61ImmBorrowLoc[5](Arg5: Option<u64>)
62Call option::is_some<u64>(&Option<u64>): bool
63StLoc[10](loc2: bool)
64Branch(67)
B25:
65LdFalse
66StLoc[10](loc2: bool)
B26:
67MoveLoc[10](loc2: bool)
68BrFalse(80)
B27:
69ImmBorrowLoc[4](Arg4: Option<u64>)
70Call option::borrow<u64>(&Option<u64>): &u64
71ReadRef
72ImmBorrowLoc[5](Arg5: Option<u64>)
73Call option::borrow<u64>(&Option<u64>): &u64
74ReadRef
75Lt
76BrFalse(78)
B28:
77Branch(80)
B29:
78LdU64(13839000809491922973)
79Abort
B30:
80MoveLoc[0](Arg0: address)
81MoveLoc[1](Arg1: address)
82Call option::some<address>(address): Option<address>
83MoveLoc[2](Arg2: Option<TypeName>)
84MoveLoc[3](Arg3: Option<u256>)
85MoveLoc[4](Arg4: Option<u64>)
86MoveLoc[5](Arg5: Option<u64>)
87MoveLoc[6](Arg6: Option<RateLimit>)
88MoveLoc[7](Arg7: String)
89Pack[2](Settings)
90Ret
}
 
share_new<Ty0>(Arg0: Settings, Arg1: &mut TxContext) {
L2: loc0: Allowance<Ty0>
L3: loc1: address
B0:
0ImmBorrowLoc[0](Arg0: Settings)
1ImmBorrowField[7](Settings.funder: address)
2ReadRef
3StLoc[3](loc1: address)
4CopyLoc[1](Arg1: &mut TxContext)
5Call object::new(&mut TxContext): UID
6MoveLoc[0](Arg0: Settings)
7LdU256(0)
8PackGeneric[4](Allowance<Ty0>)
9StLoc[2](loc0: Allowance<Ty0>)
10MoveLoc[1](Arg1: &mut TxContext)
11Call object::new(&mut TxContext): UID
12ImmBorrowLoc[2](loc0: Allowance<Ty0>)
13ImmBorrowFieldGeneric[1](Allowance.id: UID)
14Call object::uid_to_inner(&UID): ID
15PackGeneric[3](AllowanceCap<Ty0>)
16MoveLoc[3](loc1: address)
17Call transfer::transfer<AllowanceCap<Ty0>>(AllowanceCap<Ty0>, address)
18MoveLoc[2](loc0: Allowance<Ty0>)
19Call transfer::share_object<Allowance<Ty0>>(Allowance<Ty0>)
20Ret
}
 
Constants [
0 => vector<u8>: "ENotSpender" // interpreted as UTF8 string
1 => vector<u8>: "Transaction sender is not this allowance's spender" // interpreted as UTF8 string
2 => vector<u8>: "EWrongApp" // interpreted as UTF8 string
3 => vector<u8>: "Allowance is not bound to this app" // interpreted as UTF8 string
4 => vector<u8>: "EExpired" // interpreted as UTF8 string
5 => vector<u8>: "Allowance has expired" // interpreted as UTF8 string
6 => vector<u8>: "EExceedsLifetimeCap" // interpreted as UTF8 string
7 => vector<u8>: "Spend would exceed the lifetime cap" // interpreted as UTF8 string
8 => vector<u8>: "EExceedsRateLimit" // interpreted as UTF8 string
9 => vector<u8>: "Spend would exceed the current rate-limit window" // interpreted as UTF8 string
10 => vector<u8>: "ENoLimit" // interpreted as UTF8 string
11 => vector<u8>: "Allowance must have a lifetime cap or a rate limit" // interpreted as UTF8 string
12 => vector<u8>: "EWrongAllowance" // interpreted as UTF8 string
13 => vector<u8>: "Withdrawal was issued for a different allowance" // interpreted as UTF8 string
14 => vector<u8>: "EBadRateLimit" // interpreted as UTF8 string
15 => vector<u8>: "Rate limit needs a positive period and limit" // interpreted as UTF8 string
16 => vector<u8>: "ENotStarted" // interpreted as UTF8 string
17 => vector<u8>: "Allowance is not active yet; it has a future start timestamp" // interpreted as UTF8 string
18 => vector<u8>: "EHasApp" // interpreted as UTF8 string
19 => vector<u8>: "App-bound allowance: spend through `app_balance_spend`" // interpreted as UTF8 string
20 => vector<u8>: "EWrongFunder" // interpreted as UTF8 string
21 => vector<u8>: "Withdrawal debits a different address than this allowance's funder" // interpreted as UTF8 string
22 => vector<u8>: "EWrongCap" // interpreted as UTF8 string
23 => vector<u8>: "Cap does not match this allowance" // interpreted as UTF8 string
24 => vector<u8>: "ENameTooLong" // interpreted as UTF8 string
25 => vector<u8>: "Name exceeds the 128-byte limit" // interpreted as UTF8 string
26 => vector<u8>: "EZeroLifetimeCap" // interpreted as UTF8 string
27 => vector<u8>: "Lifetime cap must be greater than zero" // interpreted as UTF8 string
28 => vector<u8>: "EBadTimeWindow" // interpreted as UTF8 string
29 => vector<u8>: "Expiration must be after the start time" // interpreted as UTF8 string
30 => vector<u8>: "ENoExpiration" // interpreted as UTF8 string
31 => vector<u8>: "Allowance must have an expiration or a rate limit" // interpreted as UTF8 string
32 => vector<u8>: "ENotEnabled" // interpreted as UTF8 string
33 => vector<u8>: "Allowances are not enabled" // interpreted as UTF8 string
34 => vector<u8>: "ESponsorWithdrawalNotEnabled" // interpreted as UTF8 string
35 => vector<u8>: "Sponsor allowance withdrawals are not enabled" // interpreted as UTF8 string
36 => u64: 128
37 => u64: 86400000
38 => vector<u8>: "enable_allowances" // interpreted as UTF8 string
]
}