Skip to content
This repository was archived by the owner on Sep 13, 2021. It is now read-only.

Implement new childstorage methods #73

Merged
merged 8 commits into from
May 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ else echo "Please install and run Docker or Podman if you want to compile the So
fi

if [[ -d lib/ink ]]; then
git --git-dir lib/ink/.git pull
git --git-dir lib/ink/.git pull origin master
else
git clone --depth=1 --branch=master https://github.com/paritytech/ink.git lib/ink
fi
Expand Down
10 changes: 5 additions & 5 deletions contracts/assemblyscript/erc20/assembly/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ function handle(input: Uint8Array): Uint8Array {
return toBytes(totalSupplyValue);
case Action.BalanceOf: { // first byte: 0x01
// Returns the account balance of the account with the address 'owner'.
const owner = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart), 1, 32);
const owner = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart as i32), 1, 32);
return getBalanceOrZero(owner);
}
case Action.Transfer: { // first byte: 0x02
// Transfers 'value' amount of tokens to address 'to'
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart), 1, 48);
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart as i32), 1, 48);
const to = parameters.subarray(0,32);
const value = u128.from(parameters.subarray(32,48));
const CALLER = getCaller();
Expand All @@ -63,7 +63,7 @@ function handle(input: Uint8Array): Uint8Array {
}
case Action.TransferFrom: { // first byte: 0x03
// Transfers 'value' amount of tokens from address 'owner' to address 'to'
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart), 1, 80);
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart as i32), 1, 80);
const owner: Uint8Array = parameters.subarray(0,32);
const to: Uint8Array = parameters.subarray(32, 64);
const value: u128 = u128.from(parameters.subarray(64,80));
Expand All @@ -84,7 +84,7 @@ function handle(input: Uint8Array): Uint8Array {
}
case Action.Approve: { // first byte: 0x04
// Allows 'spender' to withdraw from a callers account multiple times, up to the 'value' amount
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart), 1, 48);
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart as i32), 1, 48);
const spender: Uint8Array = parameters.subarray(0,32);
const amount: Uint8Array = parameters.subarray(32,48);
const CALLER = getCaller();
Expand All @@ -96,7 +96,7 @@ function handle(input: Uint8Array): Uint8Array {
}
case Action.Allowance: { // first byte: 0x05
// Returns the amount which 'spender' is still allowed to withdraw from 'owner'
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart), 1, 64);
const parameters = Uint8Array.wrap(changetype<ArrayBuffer>(input.dataStart as i32), 1, 64);
const owner: Uint8Array = parameters.subarray(0,32);
const spender: Uint8Array = parameters.subarray(32,64);

Expand Down
2 changes: 1 addition & 1 deletion contracts/assemblyscript/erc20/assembly/lib-contract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export function toBytes<T>(num: T, le: boolean = true): Uint8Array {
// accept only integers and booleans
if (isInteger<T>()) {
const arr = new Uint8Array(sizeof<T>());
store<T>(arr.dataStart, le ? num : bswap(num));
store<T>(arr.dataStart as i32, le ? num : bswap(num));
return arr;
}
assert(false);
Expand Down
20 changes: 10 additions & 10 deletions contracts/assemblyscript/erc20/assembly/lib.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,22 @@ export function getValueTransferred(): Uint8Array {
export function printLine(value: string): void {
const string = String.UTF8.encode(value);
const stringArray = Uint8Array.wrap(string);
ext_println(stringArray.dataStart, string.byteLength);
ext_println(stringArray.dataStart as i32, string.byteLength);
}


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 pointer: i32 = value ? value.dataStart as i32 : 0;
const length: i32 = value ? value.length : 0;

ext_set_storage(key.dataStart, pointer, length);
ext_set_storage(key.dataStart as i32, pointer, length);
}
}

// check for length 32 bytes
export function getStorage(key: Uint8Array): Uint8Array {
const result = ext_get_storage(key.dataStart);
const result = ext_get_storage(key.dataStart as i32);
let value = new Uint8Array(0);

// if value is found
Expand All @@ -66,7 +66,7 @@ export function getStorage(key: Uint8Array): Uint8Array {
// create empty array (Vec in Rust)
value = new Uint8Array(size);
// call
ext_scratch_read(value.dataStart, 0, size);
ext_scratch_read(value.dataStart as i32, 0, size);
}
}
return value;
Expand All @@ -80,22 +80,22 @@ export function getScratchBuffer(): Uint8Array {
if (size > 0) {
value = new Uint8Array(size);
// copy data from scratch buffer
ext_scratch_read(value.dataStart, 0, size);
ext_scratch_read(value.dataStart as i32, 0, size);
}
return value;
}

export function setScratchBuffer(data: Uint8Array): void {
ext_scratch_write(data.dataStart, data.length);
ext_scratch_write(data.dataStart as i32, data.length);
}

export function setRentAllowance(value: u128): void {
const valueBuffer = value.toUint8Array();
ext_set_rent_allowance(valueBuffer.dataStart, valueBuffer.length);
ext_set_rent_allowance(valueBuffer.dataStart as i32, valueBuffer.length);
}

export function hashSha256(value: Uint8Array): Uint8Array {
const sha256 = new Uint8Array(32);
ext_hash_sha2_256(value.dataStart, value.length, sha256.dataStart)
ext_hash_sha2_256(value.dataStart as i32, value.length, sha256.dataStart as i32)
return sha256;
}
4 changes: 2 additions & 2 deletions contracts/assemblyscript/erc20/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ set -e

PROJNAME=erc20

cat build/$PROJNAME.wat | sed "s/(import \"env\" \"memory\" (memory \$0 1))/(import \"env\" \"memory\" (memory \$0 2 16))/" > build/$PROJNAME-fixed.wat
cat build/$PROJNAME.wat | sed "s/(import \"env\" \"memory\" (memory \$0 1))/(import \"env\" \"memory\" (memory \$0 16 16))/" > build/$PROJNAME-fixed.wat

wat2wasm -o build/$PROJNAME-fixed.wasm build/$PROJNAME-fixed.wat
wat2wasm build/$PROJNAME-fixed.wat -o build/$PROJNAME-fixed.wasm

wasm-prune --exports call,deploy build/$PROJNAME-fixed.wasm build/$PROJNAME-pruned.wasm
6 changes: 3 additions & 3 deletions contracts/assemblyscript/erc20/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
"types": "build/index.d.ts",
"license": "Apache-2.0",
"scripts": {
"build:optimized": "asc assembly/index.ts -b build/erc20.wasm -t build/erc20.wat --importMemory --noAssert --use abort= --validate --optimize",
"build:optimized": "asc assembly/index.ts -b build/erc20.wasm -t build/erc20.wat --runtime half --importMemory --noAssert --use abort= --optimize",
"build:tsd": "asc assembly/index.ts -d build/index.d.ts",
"build": "rm -rf build && mkdir build && yarn build:optimized && yarn build:tsd"
},
"dependencies": {
"as-bignum": "^0.1.5",
"assemblyscript": "^0.9.2"
"as-bignum": "^0.1.7",
"assemblyscript": "^0.9.4-nightly.20200510"
},
"devDependencies": {
"@types/node": "^12.12.17",
Expand Down
38 changes: 19 additions & 19 deletions contracts/assemblyscript/erc20/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,34 @@


"@types/node@^12.12.17":
version "12.12.24"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.24.tgz#d4606afd8cf6c609036b854360367d1b2c78931f"
integrity sha512-1Ciqv9pqwVtW6FsIUKSZNB82E5Cu1I2bBTj1xuIHXLe/1zYLl3956Nbhg2MzSYHVfl9/rmanjbQIb7LibfCnug==
version "12.12.38"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.38.tgz#58841a382f231ad005dbb935c36d44aa1118a26b"
integrity sha512-75eLjX0pFuTcUXnnWmALMzzkYorjND0ezNEycaKesbUBg9eGZp4GHPuDmkRc4mQQvIpe29zrzATNRA6hkYqwmA==

as-bignum@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/as-bignum/-/as-bignum-0.1.5.tgz#e97a46a175644c277ecfe17d3850a63b6e55ac44"
integrity sha512-lv0ZOxtBReuCq6wpXUtjm6Mrj7CQn+qdSgF/O7yh553aH4FRrRaUXp/ywfSNMoiPK7AJ47f9gcKs0Toi5H84iA==
as-bignum@^0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/as-bignum/-/as-bignum-0.1.7.tgz#e580d25089d392fb67d321d44b8fed36b7c475dc"
integrity sha512-HqCW9HSKTVLxAebu8ctg52o2+F/xN07GofXzjALlABYxayi241zxrKDU7Mmu/ArKQkAuftSaP+nx2HIzvaC3TA==

assemblyscript@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.9.2.tgz#dd254370b8436bd997d14bb7e867535180907995"
integrity sha512-eqPbxS323ivXdUclGJjvihxEEMBaXcNYHLb17j3j3UaYvkqVPNSrNuJ/H1r7G/UwmQnFQ8NDrQ9BncOFCGmahg==
assemblyscript@^0.9.4-nightly.20200510:
version "0.9.4-nightly.20200510"
resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.9.4-nightly.20200510.tgz#09b4b22780151609b8fe2f8fae8467290ba3e4fa"
integrity sha512-mRJvyS79exDNxuTrwgFG8pgRbxMUwh7zK9NYDptJU5OwE7VbaSDOpJ/WpcZ4oecvHMJm0Zp78m3TG8AYhr0GIQ==
dependencies:
binaryen "90.0.0-nightly.20200214"
binaryen "92.0.0-nightly.20200426"
long "^4.0.0"

binaryen@90.0.0-nightly.20200214:
version "90.0.0-nightly.20200214"
resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-90.0.0-nightly.20200214.tgz#c2f46314dda59ef359c5fa24c0b6180b0ba2f00b"
integrity sha512-ZHajaPd2aP6kDrM9q77afnA402Ufsuw9yLUxtAfgmIglP1JMB2XSRmaXc5pgCELaX53PWJIdcH07LL8uNfTBRw==
binaryen@92.0.0-nightly.20200426:
version "92.0.0-nightly.20200426"
resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-92.0.0-nightly.20200426.tgz#06001c7284e261dff808753a631b06eef87636e0"
integrity sha512-e9aKrfV8MBFjLBITaY89/ulGhZ0AQ9RDb0B4ZGg7Qe3fM445JNiQh6Dc2k0+wTAU95oUAY0uGnNEIGUtEnirag==

long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==

typescript@^3.2.2:
version "3.7.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19"
integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==
version "3.8.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
18 changes: 9 additions & 9 deletions contracts/assemblyscript/flipper/assembly/lib.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,22 @@ export function toBytes<T>(num: T, le: boolean = true): Uint8Array {
// accept only integers and booleans
if (isInteger<T>()) {
const arr = new Uint8Array(sizeof<T>());
store<T>(arr.dataStart, le ? num : bswap(num));
store<T>(arr.dataStart as i32, le ? num : bswap(num));
return arr;
}
assert(false);
}

export function setStorage(key: Uint8Array, value: Uint8Array | null): void {
const pointer = value ? value!.dataStart : 0;
const length = value ? value.length : 0;
const pointer: i32 = value ? value.dataStart as i32 : 0;
const length: i32 = value ? value.length : 0;

ext_set_storage(key.dataStart, pointer, length);
ext_set_storage(key.dataStart as i32, pointer, length);
}

// check for length 32 bytes
export function getStorage(key: Uint8Array): Uint8Array {
const result = ext_get_storage(key.dataStart);
const result = ext_get_storage(key.dataStart as i32);
let value = new Uint8Array(0);

// if value is found
Expand All @@ -47,7 +47,7 @@ export function getStorage(key: Uint8Array): Uint8Array {
// create empty array (Vec in Rust)
value = new Uint8Array(size);
// call
ext_scratch_read(value.dataStart, 0, size);
ext_scratch_read(value.dataStart as i32, 0, size);
}
}
return value;
Expand All @@ -61,16 +61,16 @@ export function getScratchBuffer(): Uint8Array {
if (size > 0) {
value = new Uint8Array(size);
// copy data from scratch buffer
ext_scratch_read(value.dataStart, 0, size);
ext_scratch_read(value.dataStart as i32, 0, size);
}
return value;
}

export function setScratchBuffer(data: Uint8Array): void {
ext_scratch_write(data.dataStart, data.length);
ext_scratch_write(data.dataStart as i32, data.length);
}

export function setRentAllowance(value: u128): void {
const valueBuffer = value.toUint8Array();
ext_set_rent_allowance(valueBuffer.dataStart, valueBuffer.length);
ext_set_rent_allowance(valueBuffer.dataStart as i32, valueBuffer.length);
}
8 changes: 5 additions & 3 deletions contracts/assemblyscript/flipper/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ set -e

PROJNAME=flipper

cat build/$PROJNAME.wat | sed "s/(import \"env\" \"memory\" (memory \$0 1))/(import \"env\" \"memory\" (memory \$0 2 16))/" > build/$PROJNAME-fixed.wat
cat build/$PROJNAME.wat | sed "s/(import \"env\" \"memory\" (memory \$0 1))/(import \"env\" \"memory\" (memory \$0 16 16))/" > build/$PROJNAME-fixed.wat

wat2wasm -o build/$PROJNAME-fixed.wasm build/$PROJNAME-fixed.wat
wat2wasm build/$PROJNAME-fixed.wat -o build/$PROJNAME-fixed.wasm

wasm-prune --exports call,deploy build/$PROJNAME-fixed.wasm build/$PROJNAME-pruned.wasm
wasm-prune --exports call,deploy build/$PROJNAME-fixed.wasm build/$PROJNAME-pruned.wasm

wasm2wat build/$PROJNAME-pruned.wasm -o build/$PROJNAME-pruned.wat
8 changes: 4 additions & 4 deletions contracts/assemblyscript/flipper/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
"types": "build/index.d.ts",
"license": "Apache-2.0",
"scripts": {
"build:optimized": "asc assembly/index.ts -b build/flipper.wasm -t build/flipper.wat --importMemory --noAssert --use abort= --validate --optimize",
"build:optimized": "asc assembly/index.ts -b build/flipper.wasm -t build/flipper.wat --runtime half --importMemory --noAssert --use abort= --optimize",
"build:tsd": "asc assembly/index.ts -d build/index.d.ts",
"build": "yarn build:optimized && yarn build:tsd"
},
"dependencies": {
"as-bignum": "^0.1.5",
"assemblyscript": "^0.9.2"
"as-bignum": "^0.1.7",
"assemblyscript": "^0.9.4-nightly.20200510"
},
"devDependencies": {
"@types/node": "^10.17.2",
"typescript": "^3.2.2"
}
}
}
38 changes: 19 additions & 19 deletions contracts/assemblyscript/flipper/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,34 @@


"@types/node@^10.17.2":
version "10.17.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.5.tgz#c1920150f7b90708a7d0f3add12a06bc9123c055"
integrity sha512-RElZIr/7JreF1eY6oD5RF3kpmdcreuQPjg5ri4oQ5g9sq7YWU8HkfB3eH8GwAwxf5OaCh0VPi7r4N/yoTGelrA==
version "10.17.21"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.21.tgz#c00e9603399126925806bed2d9a1e37da506965e"
integrity sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==

as-bignum@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/as-bignum/-/as-bignum-0.1.5.tgz#e97a46a175644c277ecfe17d3850a63b6e55ac44"
integrity sha512-lv0ZOxtBReuCq6wpXUtjm6Mrj7CQn+qdSgF/O7yh553aH4FRrRaUXp/ywfSNMoiPK7AJ47f9gcKs0Toi5H84iA==
as-bignum@^0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/as-bignum/-/as-bignum-0.1.7.tgz#e580d25089d392fb67d321d44b8fed36b7c475dc"
integrity sha512-HqCW9HSKTVLxAebu8ctg52o2+F/xN07GofXzjALlABYxayi241zxrKDU7Mmu/ArKQkAuftSaP+nx2HIzvaC3TA==

assemblyscript@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.9.2.tgz#dd254370b8436bd997d14bb7e867535180907995"
integrity sha512-eqPbxS323ivXdUclGJjvihxEEMBaXcNYHLb17j3j3UaYvkqVPNSrNuJ/H1r7G/UwmQnFQ8NDrQ9BncOFCGmahg==
assemblyscript@^0.9.4-nightly.20200510:
version "0.9.4-nightly.20200510"
resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.9.4-nightly.20200510.tgz#09b4b22780151609b8fe2f8fae8467290ba3e4fa"
integrity sha512-mRJvyS79exDNxuTrwgFG8pgRbxMUwh7zK9NYDptJU5OwE7VbaSDOpJ/WpcZ4oecvHMJm0Zp78m3TG8AYhr0GIQ==
dependencies:
binaryen "90.0.0-nightly.20200214"
binaryen "92.0.0-nightly.20200426"
long "^4.0.0"

binaryen@90.0.0-nightly.20200214:
version "90.0.0-nightly.20200214"
resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-90.0.0-nightly.20200214.tgz#c2f46314dda59ef359c5fa24c0b6180b0ba2f00b"
integrity sha512-ZHajaPd2aP6kDrM9q77afnA402Ufsuw9yLUxtAfgmIglP1JMB2XSRmaXc5pgCELaX53PWJIdcH07LL8uNfTBRw==
binaryen@92.0.0-nightly.20200426:
version "92.0.0-nightly.20200426"
resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-92.0.0-nightly.20200426.tgz#06001c7284e261dff808753a631b06eef87636e0"
integrity sha512-e9aKrfV8MBFjLBITaY89/ulGhZ0AQ9RDb0B4ZGg7Qe3fM445JNiQh6Dc2k0+wTAU95oUAY0uGnNEIGUtEnirag==

long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==

typescript@^3.2.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb"
integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==
version "3.8.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
8 changes: 2 additions & 6 deletions contracts/assemblyscript/incrementer/assembly/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ import {
toBytes
} from "./lib";

const COUNTER_KEY = (new Uint8Array(32)).fill(1); // [1,1,1, ... 1]

// Inc(648) => 0088020000
// decimal: [0,136,2,0,0]
// Hex: 0x00000288
const COUNTER_KEY = (new Uint8Array(32)).fill(1);

enum Action {
Inc,
Expand All @@ -36,7 +32,7 @@ function handle(input: Uint8Array): Uint8Array {
switch (input[0]) {
case Action.Inc:
// read 4 bytes (u32) from storageBuffer with offset 1
const by = load<u32>(input.dataStart, 1);
const by = load<u32>(input.dataStart as i32, 1);
const newCounter = toBytes(counterValue + by);
setStorage(COUNTER_KEY, newCounter);
break;
Expand Down
Loading