mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 04:01:02 +00:00
contracts: Don't rely on reserved balances keeping an account alive (#13369)
* Move storage deposits to their own account * Take ed for contract's account from origin * Apply suggestions from code review Co-authored-by: Cyrill Leutwiler <bigcyrill@hotmail.com> Co-authored-by: Sasha Gryaznov <hi@agryaznov.com> * Update stale docs * Use 16 bytes prefix for address derivation * Update frame/contracts/src/address.rs Co-authored-by: Cyrill Leutwiler <bigcyrill@hotmail.com> * Fix merge * ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_contracts * Update frame/contracts/primitives/src/lib.rs Co-authored-by: Sasha Gryaznov <hi@agryaznov.com> --------- Co-authored-by: Cyrill Leutwiler <bigcyrill@hotmail.com> Co-authored-by: Sasha Gryaznov <hi@agryaznov.com> Co-authored-by: command-bot <>
This commit is contained in:
committed by
GitHub
parent
292e5ee4e7
commit
330484bb19
@@ -16,27 +16,11 @@
|
||||
)
|
||||
)
|
||||
|
||||
(func $current_balance (param $sp i32) (result i64)
|
||||
(i32.store
|
||||
(i32.sub (get_local $sp) (i32.const 16))
|
||||
(i32.const 8)
|
||||
)
|
||||
(call $seal_balance
|
||||
(i32.sub (get_local $sp) (i32.const 8))
|
||||
(i32.sub (get_local $sp) (i32.const 16))
|
||||
)
|
||||
(call $assert
|
||||
(i32.eq (i32.load (i32.sub (get_local $sp) (i32.const 16))) (i32.const 8))
|
||||
)
|
||||
(i64.load (i32.sub (get_local $sp) (i32.const 8)))
|
||||
)
|
||||
|
||||
(func (export "deploy"))
|
||||
|
||||
(func (export "call")
|
||||
(local $sp i32)
|
||||
(local $exit_code i32)
|
||||
(local $balance i64)
|
||||
|
||||
;; Length of the buffer
|
||||
(i32.store (i32.const 20) (i32.const 32))
|
||||
@@ -54,9 +38,6 @@
|
||||
|
||||
;; Read current balance into local variable.
|
||||
(set_local $sp (i32.const 1024))
|
||||
(set_local $balance
|
||||
(call $current_balance (get_local $sp))
|
||||
)
|
||||
|
||||
;; Fail to deploy the contract since it returns a non-zero exit status.
|
||||
(set_local $exit_code
|
||||
@@ -82,11 +63,6 @@
|
||||
(i32.eq (get_local $exit_code) (i32.const 2)) ;; ReturnCode::CalleeReverted
|
||||
)
|
||||
|
||||
;; Check that balance has not changed.
|
||||
(call $assert
|
||||
(i64.eq (get_local $balance) (call $current_balance (get_local $sp)))
|
||||
)
|
||||
|
||||
;; Fail to deploy the contract due to insufficient gas.
|
||||
(set_local $exit_code
|
||||
(call $seal_instantiate
|
||||
@@ -112,11 +88,6 @@
|
||||
(i32.eq (get_local $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped
|
||||
)
|
||||
|
||||
;; Check that balance has not changed.
|
||||
(call $assert
|
||||
(i64.eq (get_local $balance) (call $current_balance (get_local $sp)))
|
||||
)
|
||||
|
||||
;; Length of the output buffer
|
||||
(i32.store
|
||||
(i32.sub (get_local $sp) (i32.const 4))
|
||||
@@ -153,14 +124,6 @@
|
||||
(i32.eq (i32.load (i32.sub (get_local $sp) (i32.const 4))) (i32.const 32))
|
||||
)
|
||||
|
||||
;; Check that balance has been deducted.
|
||||
(set_local $balance
|
||||
(i64.sub (get_local $balance) (i64.load (i32.const 0)))
|
||||
)
|
||||
(call $assert
|
||||
(i64.eq (get_local $balance) (call $current_balance (get_local $sp)))
|
||||
)
|
||||
|
||||
;; Zero out destination buffer of output
|
||||
(i32.store
|
||||
(i32.sub (get_local $sp) (i32.const 4))
|
||||
@@ -204,11 +167,6 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Check that balance has not changed.
|
||||
(call $assert
|
||||
(i64.eq (get_local $balance) (call $current_balance (get_local $sp)))
|
||||
)
|
||||
|
||||
;; Fail to call the contract due to insufficient gas.
|
||||
(set_local $exit_code
|
||||
(call $seal_call
|
||||
@@ -229,11 +187,6 @@
|
||||
(i32.eq (get_local $exit_code) (i32.const 1)) ;; ReturnCode::CalleeTrapped
|
||||
)
|
||||
|
||||
;; Check that balance has not changed.
|
||||
(call $assert
|
||||
(i64.eq (get_local $balance) (call $current_balance (get_local $sp)))
|
||||
)
|
||||
|
||||
;; Zero out destination buffer of output
|
||||
(i32.store
|
||||
(i32.sub (get_local $sp) (i32.const 4))
|
||||
@@ -276,14 +229,6 @@
|
||||
(i32.const 0x77665544)
|
||||
)
|
||||
)
|
||||
|
||||
;; Check that balance has been deducted.
|
||||
(set_local $balance
|
||||
(i64.sub (get_local $balance) (i64.load (i32.const 0)))
|
||||
)
|
||||
(call $assert
|
||||
(i64.eq (get_local $balance) (call $current_balance (get_local $sp)))
|
||||
)
|
||||
)
|
||||
|
||||
(data (i32.const 0) "\00\80") ;; The value to transfer on instantiation and calls.
|
||||
|
||||
Reference in New Issue
Block a user