Skip to content

Commit

Permalink
Cleanup storage interface
Browse files Browse the repository at this point in the history
  • Loading branch information
jacogr committed Feb 20, 2018
1 parent d8726d1 commit 786b54c
Show file tree
Hide file tree
Showing 20 changed files with 132 additions and 100 deletions.
5 changes: 2 additions & 3 deletions package.json
Expand Up @@ -9,11 +9,10 @@
"check": "eslint packages && flow check",
"start": "node packages/client/scripts/polkadot.js",
"start2": "node packages/client/scripts/polkadot.js --db-path=./tmp --p2p-peers=/ip4/127.0.0.1/tcp/39933 --p2p-port=39934 --rpc-port=9934",
"test": "jest --coverage",
"postinstall": "./build-wasm.sh"
"test": "jest --coverage"
},
"devDependencies": {
"@polkadot/dev": "^0.16.9",
"@polkadot/dev": "^0.16.10",
"lerna": "^2.5.1"
}
}
2 changes: 1 addition & 1 deletion packages/client-chains/package.json
Expand Up @@ -29,7 +29,7 @@
"test": "echo \"Tests only available from root wrapper\""
},
"dependencies": {
"@polkadot/util": "^0.15.3",
"@polkadot/util": "^0.15.5",
"babel-runtime": "^6.26.0"
}
}
2 changes: 1 addition & 1 deletion packages/client-db/package.json
Expand Up @@ -31,7 +31,7 @@
},
"dependencies": {
"@polkadot/client-state": "^0.8.2",
"@polkadot/util": "^0.15.3",
"@polkadot/util": "^0.15.5",
"babel-runtime": "^6.26.0",
"leveldown": "^2.1.1",
"levelup": "^2.0.1",
Expand Down
8 changes: 5 additions & 3 deletions packages/client-db/src/memory/del.js
Expand Up @@ -5,10 +5,12 @@

import type { Memory$Storage } from './types';

const u8aToHex = require('@polkadot/util/u8a/toHex');
const u8aToString = require('@polkadot/util/u8a/toString');

module.exports = function del (storage: Memory$Storage, k: Uint8Array): void {
if (storage[u8aToHex(k)]) {
delete storage[u8aToHex(k)];
const ks = u8aToString(k);

if (storage[ks]) {
delete storage[ks];
}
};
8 changes: 5 additions & 3 deletions packages/client-db/src/memory/get.js
Expand Up @@ -5,10 +5,12 @@

import type { Memory$Storage } from './types';

const u8aToHex = require('@polkadot/util/u8a/toHex');
const u8aToString = require('@polkadot/util/u8a/toString');

module.exports = function get (storage: Memory$Storage, k: Uint8Array): Uint8Array {
return storage[u8aToHex(k)]
? storage[u8aToHex(k)].v
const ks = u8aToString(k);

return storage[ks]
? storage[ks].v.slice()
: new Uint8Array([]);
};
10 changes: 6 additions & 4 deletions packages/client-db/src/memory/set.js
Expand Up @@ -5,11 +5,13 @@

import type { Memory$Storage } from './types';

const u8aToHex = require('@polkadot/util/u8a/toHex');
const u8aToString = require('@polkadot/util/u8a/toString');

module.exports = function set (storage: Memory$Storage, k: Uint8Array, v: Uint8Array): void {
storage[u8aToHex(k)] = {
k,
v
const ks = u8aToString(k);

storage[ks] = {
k: k.slice(),
v: v.slice()
};
};
2 changes: 1 addition & 1 deletion packages/client-p2p/package.json
Expand Up @@ -32,7 +32,7 @@
"dependencies": {
"@polkadot/primitives": "^0.6.5",
"@polkadot/primitives-rlp": "^0.6.5",
"@polkadot/util": "^0.15.3",
"@polkadot/util": "^0.15.5",
"babel-runtime": "^6.26.0",
"eventemitter3": "^2.0.3",
"libp2p": "^0.13.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/client-rpc/package.json
Expand Up @@ -34,7 +34,7 @@
"@polkadot/client": "^0.8.2"
},
"dependencies": {
"@polkadot/util": "^0.15.3",
"@polkadot/util": "^0.15.5",
"babel-runtime": "^6.26.0",
"co-body": "^5.1.1",
"eventemitter3": "^2.0.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/client-state/package.json
Expand Up @@ -30,7 +30,7 @@
},
"dependencies": {
"@polkadot/primitives": "^0.6.5",
"@polkadot/util": "^0.15.3",
"@polkadot/util": "^0.15.5",
"babel-runtime": "^6.26.0"
},
"devDependencies": {
Expand Down
6 changes: 3 additions & 3 deletions packages/client-wasm-runtime/package.json
Expand Up @@ -30,9 +30,9 @@
"test": "echo \"Tests only available from root wrapper\""
},
"dependencies": {
"@polkadot/util": "^0.15.3",
"@polkadot/util-crypto": "^0.15.3",
"@polkadot/util-triehash": "^0.15.3",
"@polkadot/util": "^0.15.5",
"@polkadot/util-crypto": "^0.15.5",
"@polkadot/util-triehash": "^0.15.5",
"babel-runtime": "^6.26.0",
"merkle-patricia-tree": "^2.3.0"
}
Expand Down
8 changes: 5 additions & 3 deletions packages/client-wasm-runtime/src/environment/storage/del.js
Expand Up @@ -6,11 +6,13 @@
import type { BaseDbInterface } from '@polkadot/client-db/types';
import type { Memory$Storage } from '@polkadot/client-db/memory/types';

const u8aToHex = require('@polkadot/util/u8a/toHex');
const u8aToString = require('@polkadot/util/u8a/toString');

module.exports = function del (pending: Memory$Storage, backend: BaseDbInterface, k: Uint8Array): void {
pending[u8aToHex(k)] = {
k,
const ks = u8aToString(k);

pending[ks] = {
k: k.slice(),
v: new Uint8Array([])
};
};
8 changes: 5 additions & 3 deletions packages/client-wasm-runtime/src/environment/storage/get.js
Expand Up @@ -6,10 +6,12 @@
import type { BaseDbInterface } from '@polkadot/client-db/types';
import type { Memory$Storage } from '@polkadot/client-db/memory/types';

const u8aToHex = require('@polkadot/util/u8a/toHex');
const u8aToString = require('@polkadot/util/u8a/toString');

module.exports = function get (pending: Memory$Storage, backend: BaseDbInterface, k: Uint8Array): Uint8Array {
return pending[u8aToHex(k)]
? pending[u8aToHex(k)].v
const ks = u8aToString(k);

return pending[ks]
? pending[ks].v.slice()
: backend.get(k);
};
10 changes: 5 additions & 5 deletions packages/client-wasm-runtime/src/environment/storage/set.js
Expand Up @@ -6,13 +6,13 @@
import type { BaseDbInterface } from '@polkadot/client-db/types';
import type { Memory$Storage } from '@polkadot/client-db/memory/types';

const u8aToHex = require('@polkadot/util/u8a/toHex');
const u8aToString = require('@polkadot/util/u8a/toString');

module.exports = function set (pending: Memory$Storage, backend: BaseDbInterface, k: Uint8Array, v: Uint8Array): void {
// console.log('setStorage', u8aToHex(k), k, v);
const ks = u8aToString(k);

pending[u8aToHex(k)] = {
k,
v
pending[ks] = {
k: k.slice(),
v: v.slice()
};
};
2 changes: 1 addition & 1 deletion packages/client-wasm-runtime/src/storage/index.js
Expand Up @@ -63,7 +63,7 @@ module.exports = function storage ({ l, heap, storage }: RuntimeEnv): RuntimeInt
return data.length;
},
set_storage: (keyPtr: PointerType, keyLength: number, dataPtr: PointerType, dataLength: number): void => {
l.debug('set_storage', [keyPtr, keyLength, dataPtr, dataLength]);
l.debug('set_storage', [keyPtr, keyLength, dataPtr, dataLength], heap.get(keyPtr, keyLength), heap.get(dataPtr, dataLength));

storage.set(
heap.get(keyPtr, keyLength),
Expand Down
2 changes: 1 addition & 1 deletion packages/client-wasm/package.json
Expand Up @@ -39,7 +39,7 @@
"dependencies": {
"@polkadot/client-wasm-runtime": "^0.8.2",
"@polkadot/primitives-codec": "^0.6.5",
"@polkadot/util": "^0.15.3",
"@polkadot/util": "^0.15.5",
"@polkadot/wasm-bin": "paritytech/polkadot-wasm-bin#5b52b20d8f5446fa1c1dc7c822dbf7179e906954",
"babel-runtime": "^6.26.0",
"yargs": "^11.0.0"
Expand Down
15 changes: 11 additions & 4 deletions packages/client-wasm/src/create/fn.js
Expand Up @@ -5,12 +5,16 @@

import type { RuntimeInterface } from '@polkadot/client-wasm-runtime/types';

const u8aToHex = require('@polkadot/util/u8a/toHex');
type FnResult = {
lo: number,
hi: number
};
type FnType = (...data: Array<Uint8Array>) => FnResult;

const FnType = (...data: Array<Uint8Array>) => Uint8Array;
const u8aToHex = require('@polkadot/util/u8a/toHex');

module.exports = function createFn (fns: WebAssemblyInstance$Exports, name: string, { environment: { l, heap } }: RuntimeInterface): FnType {
return (...data: Array<Uint8Array>): number => {
return (...data: Array<Uint8Array>): FnResult => {
const params = data.reduce((params, data) => {
l.debug('storing data', u8aToHex(data));

Expand All @@ -22,6 +26,9 @@ module.exports = function createFn (fns: WebAssemblyInstance$Exports, name: stri

l.debug('executing', name, params);

return fns[name].apply(null, params);
const lo: number = fns[name].apply(null, params);
const hi: number = fns['get_result_hi']();

return { lo, hi };
};
};
12 changes: 11 additions & 1 deletion packages/client-wasm/src/create/fn.spec.js
Expand Up @@ -24,7 +24,8 @@ describe('createFn', () => {
}
};
instance = {
test: jest.fn()
test: jest.fn(() => 42),
get_result_hi: jest.fn(() => 69)
};
});

Expand Down Expand Up @@ -63,4 +64,13 @@ describe('createFn', () => {
7, 3 // offset, length
);
});

it('returns the hi/lo result pair', () => {
expect(
createFn(instance, 'test', runtime)()
).toEqual({
lo: 42,
hi: 69
});
});
});
40 changes: 20 additions & 20 deletions packages/client-wasm/src/polkadot.spec.js
Expand Up @@ -14,6 +14,7 @@ describe('polkadot (runtimes)', () => {
let config;
let chain;
let db;
let getStorage;
let setStorage;

beforeEach(() => {
Expand All @@ -28,6 +29,8 @@ describe('polkadot (runtimes)', () => {
db = memoryDb();

instance = wasm(config, { chain, db }, code);

getStorage = instance.runtime.environment.storage.get;
setStorage = instance.runtime.environment.storage.set;
});

Expand All @@ -41,32 +44,29 @@ describe('polkadot (runtimes)', () => {
beforeEach(() => {
setStorage(
new Uint8Array([209, 171, 83, 92, 36, 46, 52, 24, 171, 77, 162, 203, 90, 170, 128, 166]),
new Uint8Array([111, 0, 0, 0, 0, 0, 0, 0])
new Uint8Array([(69 + 42), 0, 0, 0, 0, 0, 0, 0])
);
});

it('executes a basic transaction', () => {
instance.exports.execute_transaction(
hexToU8a('0x000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910000002f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee000000000000000022d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a45000000000000005f9832c5a4a39e2dd4a3a0c5b400e9836beb362cb8f7d845a8291a2ae6fe366612e080e4acd0b5a75c3d0b6ee69614a68fb63698c1e76bf1f2dcd8fa617ddf05')
);

expect(
instance.exports.execute_transaction(
hexToU8a('0x000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910000002f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee000000000000000022d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a45000000000000005f9832c5a4a39e2dd4a3a0c5b400e9836beb362cb8f7d845a8291a2ae6fe366612e080e4acd0b5a75c3d0b6ee69614a68fb63698c1e76bf1f2dcd8fa617ddf05')
getStorage(
hexToU8a('0xd1ab535c242e3418ab4da2cb5aaa80a6')
)
).toBeDefined();

/*
0000000000000000000000000000000000000000000000000000000000000000
0100000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000
91000000
2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee
0000000000000000
22
d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a
4500000000000000
5f9832c5a4a39e2dd4a3a0c5b400e9836beb362cb8f7d845a8291a2ae6fe3666
12e080e4acd0b5a75c3d0b6ee69614a68fb63698c1e76bf1f2dcd8fa617ddf05
*/
).toEqual(
new Uint8Array([42, 0, 0, 0, 0, 0, 0, 0])
);
expect(
getStorage(
hexToU8a('0xb51ac18fd0242fd7fd033de43fd2940f')
)
).toEqual(
new Uint8Array([69, 0, 0, 0, 0, 0, 0, 0])
);
});
});

Expand Down
2 changes: 1 addition & 1 deletion packages/client/package.json
Expand Up @@ -41,7 +41,7 @@
"@polkadot/client-state": "^0.8.2",
"@polkadot/client-wasm": "^0.8.2",
"@polkadot/primitives": "^0.6.5",
"@polkadot/util": "^0.15.3",
"@polkadot/util": "^0.15.5",
"package-json": "^4.0.1",
"yargs": "^11.0.0"
},
Expand Down

0 comments on commit 786b54c

Please sign in to comment.