bugfix missing byte swap for the create2 salt value (#272)

Found in https://github.com/paritytech/contract-issues/issues/45, thanks
@albertov19 and @sekisamu

---------

Signed-off-by: xermicus <cyrill@parity.io>
Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
This commit is contained in:
xermicus
2025-04-03 15:20:22 +02:00
committed by GitHub
parent 313c033261
commit dab29bc89b
5 changed files with 74 additions and 0 deletions
+11
View File
@@ -250,6 +250,17 @@ sol!(
);
case!("Storage.sol", Storage, transientCall, storage_transient, value: U256);
sol!(
contract Predicted {
constructor(uint _foo);
}
contract AddressPredictor {
constructor(uint _foo, bytes memory _bytecode) payable;
}
);
case!("AddressPredictor.sol", Predicted, constructorCall, predicted_constructor, salt: U256);
case!("AddressPredictor.sol", AddressPredictor, constructorCall, address_predictor_constructor, salt: U256, bytecode: Bytes);
impl Contract {
pub fn build(calldata: Vec<u8>, name: &'static str, code: &str) -> Self {
Self {
+28
View File
@@ -486,3 +486,31 @@ fn transfer_denies_reentrancy() {
}
.run();
}
#[test]
fn create2_salt() {
let salt = U256::from(777);
let predicted = Contract::predicted_constructor(salt).pvm_runtime;
let predictor = Contract::address_predictor_constructor(salt, predicted.clone().into());
Specs {
actions: vec![
Upload {
origin: TestAddress::Alice,
code: Code::Bytes(predicted),
storage_deposit_limit: None,
},
Instantiate {
origin: TestAddress::Alice,
value: 0,
gas_limit: Some(GAS_LIMIT),
storage_deposit_limit: None,
code: Code::Bytes(predictor.pvm_runtime),
data: predictor.calldata,
salt: OptionalHex::default(),
},
],
differential: false,
..Default::default()
}
.run();
}