diff --git a/Cargo.lock b/Cargo.lock index 8b6a45e..e9550c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9724,7 +9724,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -9791,7 +9791,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "proc-macro2", "quote", @@ -9811,7 +9811,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.25.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "environmental", "parity-scale-codec", @@ -10020,7 +10020,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -10052,7 +10052,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "Inflector", "expander", @@ -10141,7 +10141,7 @@ source = "git+https://github.com/paritytech/polkadot-sdk?rev=447902eff4a574e6689 [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" [[package]] name = "sp-storage" @@ -10158,7 +10158,7 @@ dependencies = [ [[package]] name = "sp-storage" version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10193,7 +10193,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "parity-scale-codec", "tracing", @@ -10290,7 +10290,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#447902eff4a574e66894ad60cb41999b05bf5e84" +source = "git+https://github.com/paritytech/polkadot-sdk#1e89a311471eba937a9552d7d1f55af1661feb08" dependencies = [ "anyhow", "impl-trait-for-tuples", diff --git a/crates/integration/contracts/GasPrice.sol b/crates/integration/contracts/GasPrice.sol new file mode 100644 index 0000000..2a139ef --- /dev/null +++ b/crates/integration/contracts/GasPrice.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8; + +/* runner.json +{ + "differential": false, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "GasPrice" + } + } + } + }, + { + "VerifyCall": { + "success": true + } + } + ] +} +*/ + +contract GasPrice { + constructor() payable { + assert(tx.gasprice == 1); + } +} diff --git a/crates/integration/src/tests.rs b/crates/integration/src/tests.rs index a7667e7..380e2f9 100644 --- a/crates/integration/src/tests.rs +++ b/crates/integration/src/tests.rs @@ -46,6 +46,7 @@ test_spec!(immutables, "Immutables", "Immutables.sol"); test_spec!(transaction, "Transaction", "Transaction.sol"); test_spec!(block_hash, "BlockHash", "BlockHash.sol"); test_spec!(delegate, "Delegate", "Delegate.sol"); +test_spec!(gas_price, "GasPrice", "GasPrice.sol"); fn instantiate(path: &str, contract: &str) -> Vec { vec![Instantiate { diff --git a/crates/llvm-context/src/polkavm/evm/context.rs b/crates/llvm-context/src/polkavm/evm/context.rs index 825f722..32119fd 100644 --- a/crates/llvm-context/src/polkavm/evm/context.rs +++ b/crates/llvm-context/src/polkavm/evm/context.rs @@ -17,12 +17,12 @@ where /// Translates the `gas_price` instruction. pub fn gas_price<'ctx, D>( - _context: &mut Context<'ctx, D>, + context: &mut Context<'ctx, D>, ) -> anyhow::Result> where D: Dependency + Clone, { - todo!() + Ok(context.word_const(1).as_basic_value_enum()) } /// Translates the `tx.origin` instruction. diff --git a/crates/runtime-api/src/polkavm_imports.c b/crates/runtime-api/src/polkavm_imports.c index c17aa60..01a04d5 100644 --- a/crates/runtime-api/src/polkavm_imports.c +++ b/crates/runtime-api/src/polkavm_imports.c @@ -113,3 +113,5 @@ POLKAVM_IMPORT(void, return_data_size, uint32_t) POLKAVM_IMPORT(void, set_immutable_data, uint32_t, uint32_t); POLKAVM_IMPORT(void, value_transferred, uint32_t) + +POLKAVM_IMPORT(void, weight_to_fee, uint64_t, uint64_t, uint32_t); diff --git a/crates/runtime-api/src/polkavm_imports.rs b/crates/runtime-api/src/polkavm_imports.rs index 01e991f..b817bbf 100644 --- a/crates/runtime-api/src/polkavm_imports.rs +++ b/crates/runtime-api/src/polkavm_imports.rs @@ -64,9 +64,11 @@ pub static SET_IMMUTABLE_DATA: &str = "set_immutable_data"; pub static VALUE_TRANSFERRED: &str = "value_transferred"; +pub static WEIGHT_TO_FEE: &str = "weight_to_fee"; + /// All imported runtime API symbols. /// Useful for configuring common attributes and linkage. -pub static IMPORTS: [&str; 27] = [ +pub static IMPORTS: [&str; 28] = [ SBRK, MEMORY_SIZE, ADDRESS, @@ -94,6 +96,7 @@ pub static IMPORTS: [&str; 27] = [ SET_IMMUTABLE_DATA, SET_STORAGE, VALUE_TRANSFERRED, + WEIGHT_TO_FEE, ]; /// Creates a LLVM module from the [BITCODE].