diff --git a/build.sh b/build.sh index ea74337..d69b19a 100755 --- a/build.sh +++ b/build.sh @@ -8,7 +8,7 @@ set -ev provide-parity-tools -if which podman || docker info; then +if which podman || which docker || [ -n "$CI_JOB_ID" ]; then provide-wabt provide-solang cd contracts/solidity/flipper @@ -16,10 +16,9 @@ if which podman || docker info; then cd -; else echo "Please install and run Docker or Podman if you want to compile the Solang contracts and succesfully run their tests."; fi - -cd lib + git submodule foreach git pull origin master -cd ink/examples/flipper +cd lib/ink/examples/flipper cargo +nightly contract build cargo +nightly contract generate-metadata cd - diff --git a/contracts/assemblyscript/erc20/assembly/env.ts b/contracts/assemblyscript/erc20/assembly/env.ts index 6173179..15b51d9 100644 --- a/contracts/assemblyscript/erc20/assembly/env.ts +++ b/contracts/assemblyscript/erc20/assembly/env.ts @@ -13,5 +13,5 @@ export declare function ext_scratch_read(dest_ptr: i32, offset: i32, len: i32): export declare function ext_scratch_size(): i32; export declare function ext_scratch_write(src_ptr: i32, len: i32): void; export declare function ext_set_rent_allowance(value_ptr: i32, value_len: i32): void; -export declare function ext_set_storage(key_ptr: i32, value_non_null: i32, value_ptr: i32, value_len: i32): void; +export declare function ext_set_storage(key_ptr: i32, value_ptr: i32, value_len: i32): void; export declare function ext_value_transferred(): void; diff --git a/contracts/assemblyscript/erc20/assembly/lib.ts b/contracts/assemblyscript/erc20/assembly/lib.ts index ad7ff10..7f75ba6 100644 --- a/contracts/assemblyscript/erc20/assembly/lib.ts +++ b/contracts/assemblyscript/erc20/assembly/lib.ts @@ -46,9 +46,8 @@ export function setStorage(key: Uint8Array, value: Uint8Array | null): void { if(key.length === 32) { const pointer = value ? value!.dataStart : 0; const length = value ? value.length : 0; - const valueNonNull = i32(value !== null); - ext_set_storage(key.dataStart, valueNonNull, pointer, length); + ext_set_storage(key.dataStart, pointer, length); } } diff --git a/contracts/assemblyscript/flipper/assembly/env.ts b/contracts/assemblyscript/flipper/assembly/env.ts index bb8c1a9..fdfdcb9 100644 --- a/contracts/assemblyscript/flipper/assembly/env.ts +++ b/contracts/assemblyscript/flipper/assembly/env.ts @@ -9,4 +9,4 @@ export declare function ext_scratch_read(dest_ptr: i32, offset: i32, len: i32): export declare function ext_scratch_size(): i32; export declare function ext_scratch_write(src_ptr: i32, len: i32): void; export declare function ext_set_rent_allowance(value_ptr: i32, value_len: i32): void; -export declare function ext_set_storage(key_ptr: i32, value_non_null: i32, value_ptr: i32, value_len: i32): void; +export declare function ext_set_storage(key_ptr: i32, value_ptr: i32, value_len: i32): void; diff --git a/contracts/assemblyscript/flipper/assembly/lib.ts b/contracts/assemblyscript/flipper/assembly/lib.ts index f7d1e05..03bc737 100644 --- a/contracts/assemblyscript/flipper/assembly/lib.ts +++ b/contracts/assemblyscript/flipper/assembly/lib.ts @@ -29,9 +29,8 @@ export function toBytes(num: T, le: boolean = true): Uint8Array { export function setStorage(key: Uint8Array, value: Uint8Array | null): void { const pointer = value ? value!.dataStart : 0; const length = value ? value.length : 0; - const valueNonNull = i32(value !== null); - ext_set_storage(key.dataStart, valueNonNull, pointer, length); + ext_set_storage(key.dataStart, pointer, length); } // check for length 32 bytes diff --git a/contracts/assemblyscript/incrementer/assembly/env.ts b/contracts/assemblyscript/incrementer/assembly/env.ts index 68a20d2..a690eb9 100644 --- a/contracts/assemblyscript/incrementer/assembly/env.ts +++ b/contracts/assemblyscript/incrementer/assembly/env.ts @@ -9,4 +9,4 @@ export declare function ext_scratch_read(dest_ptr: i32, offset: i32, len: i32): export declare function ext_scratch_size(): i32; export declare function ext_scratch_write(src_ptr: i32, len: i32): void; export declare function ext_set_rent_allowance(value_ptr: i32, value_len: i32): void; -export declare function ext_set_storage(key_ptr: i32, value_non_null: i32, value_ptr: i32, value_len: i32): void; +export declare function ext_set_storage(key_ptr: i32, value_ptr: i32, value_len: i32): void; diff --git a/contracts/assemblyscript/incrementer/assembly/lib.ts b/contracts/assemblyscript/incrementer/assembly/lib.ts index d12438d..0ee2359 100644 --- a/contracts/assemblyscript/incrementer/assembly/lib.ts +++ b/contracts/assemblyscript/incrementer/assembly/lib.ts @@ -31,7 +31,7 @@ export function setStorage(key: Uint8Array, value: Uint8Array | null): void { const length = value ? value.length : 0; const valueNonNull = i32(value !== null); - ext_set_storage(key.dataStart, valueNonNull, pointer, length); + ext_set_storage(key.dataStart, pointer, length); } // check for length 32 bytes diff --git a/contracts/rust/raw-incrementer/src/ext.rs b/contracts/rust/raw-incrementer/src/ext.rs index fc038f2..103893d 100644 --- a/contracts/rust/raw-incrementer/src/ext.rs +++ b/contracts/rust/raw-incrementer/src/ext.rs @@ -19,7 +19,7 @@ use codec::Encode; mod cabi { extern "C" { - pub fn ext_set_storage(key_ptr: u32, value_non_null: u32, value_ptr: u32, value_len: u32); + pub fn ext_set_storage(key_ptr: u32, value_ptr: u32, value_len: u32); pub fn ext_get_storage(key_ptr: u32) -> u32; pub fn ext_scratch_size() -> u32; pub fn ext_scratch_read(dest_ptr: u32, offset: u32, len: u32); @@ -35,15 +35,12 @@ pub fn set_storage(key: &Key, value: Option<&[u8]>) { unsafe { let mut value_ptr = 0; let mut value_len = 0; - let value_non_null = if let Some(v) = value { + if let Some(v) = value { value_ptr = v.as_ptr() as u32; value_len = v.len() as u32; - 1 - } else { - 0 }; - cabi::ext_set_storage(key.0.as_ptr() as u32, value_non_null, value_ptr, value_len); + cabi::ext_set_storage(key.0.as_ptr() as u32, value_ptr, value_len); } } diff --git a/contracts/rust/restore-contract/src/ext.rs b/contracts/rust/restore-contract/src/ext.rs index c3b6a77..39f560a 100644 --- a/contracts/rust/restore-contract/src/ext.rs +++ b/contracts/rust/restore-contract/src/ext.rs @@ -19,7 +19,7 @@ use codec::{Encode, Decode}; mod cabi { extern "C" { - pub fn ext_set_storage(key_ptr: u32, value_non_null: u32, value_ptr: u32, value_len: u32); + pub fn ext_set_storage(key_ptr: u32, value_ptr: u32, value_len: u32); pub fn ext_restore_to( dest_ptr: u32, dest_len: u32, @@ -48,15 +48,13 @@ pub fn set_storage(key: &Key, value: Option<&[u8]>) { unsafe { let mut value_ptr = 0; let mut value_len = 0; - let value_non_null = if let Some(v) = value { + if let Some(v) = value { value_ptr = v.as_ptr() as u32; value_len = v.len() as u32; - 1 - } else { - 0 }; - cabi::ext_set_storage(key.as_ptr() as u32, value_non_null, value_ptr, value_len); + + cabi::ext_set_storage(key.as_ptr() as u32, value_ptr, value_len); } } diff --git a/lib/ink b/lib/ink index 9dd4f47..46b2823 160000 --- a/lib/ink +++ b/lib/ink @@ -1 +1 @@ -Subproject commit 9dd4f47d3a1f156af3ffa2d923aab489fe868a95 +Subproject commit 46b2823413b71818ed4536c4c3e63b7e9bbc70ce diff --git a/tests/consts.ts b/tests/consts.ts index ac00daa..13b86ef 100644 --- a/tests/consts.ts +++ b/tests/consts.ts @@ -6,3 +6,4 @@ export const CREATION_FEE: BN = DOT.muln(200); export const GAS_REQUIRED = 5000000; export const ALICE = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"; export const BOB = "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty"; +export const CHARLIE = "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y"; \ No newline at end of file diff --git a/tests/contracts-solidity.spec.ts b/tests/contracts-solidity.spec.ts index b072241..179f6b8 100644 --- a/tests/contracts-solidity.spec.ts +++ b/tests/contracts-solidity.spec.ts @@ -20,10 +20,8 @@ import { hexToBn, u8aToHex } from "@polkadot/util"; import { randomAsU8a } from "@polkadot/util-crypto"; import { KeyringPair } from "@polkadot/keyring/types"; import { Address } from "@polkadot/types/interfaces"; -import BN from "bn.js"; -import sha256 from "@chainsafe/as-sha256"; -import { ALICE as ALICE_ADDRESS, BOB as BOB_ADDRESS, CREATION_FEE, WSURL } from "./consts"; +import { CHARLIE as CHARLIE_ADDRESS, CREATION_FEE, WSURL } from "./consts"; import { callContract, instantiate, @@ -33,8 +31,7 @@ import { // This is a test account that is going to be created and funded before each test. const keyring = testKeyring({ type: "sr25519" }); -const ALICE = keyring.getPair(ALICE_ADDRESS); -const BOB = keyring.getPair(BOB_ADDRESS); +const CHARLIE = keyring.getPair(CHARLIE_ADDRESS); const randomSeed = randomAsU8a(32); let contractCreator: KeyringPair; let api: ApiPromise; @@ -50,7 +47,7 @@ beforeEach( return api.tx.balances .transfer(contractCreator.address, CREATION_FEE.muln(5)) - .signAndSend(BOB, (result: SubmittableResult): void => { + .signAndSend(CHARLIE, (result: SubmittableResult): void => { if ( result.status.isInBlock && result.findRecord("system", "ExtrinsicSuccess") @@ -62,7 +59,7 @@ beforeEach( } ); -describe("AssemblyScript Smart Contracts", () => { +describe("Solang Smart Contracts", () => { test("Raw Flipper contract", async (done): Promise => { // See https://github.com/paritytech/pallet-contracts-waterfall/issues/6 for info about // how to get the STORAGE_KEY of an instantiated contract