Skip to content
This repository has been archived by the owner on Mar 3, 2024. It is now read-only.

Commit

Permalink
Merge pull request #2 from hyperoracle/suning
Browse files Browse the repository at this point in the history
Project configurations
  • Loading branch information
fewwwww authored Jun 13, 2023
2 parents fd9cfad + 6ca85aa commit 7ba5b84
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 85 deletions.
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
zkwasm.ts
1 change: 1 addition & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
22 changes: 14 additions & 8 deletions demo-uniswap-v2-idx-zkgraph/mapping.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import { Bytes } from "../sdk/type";
export function handleEvent(esig: Uint8Array, topic1: Uint8Array, topic2: Uint8Array, topic3: Uint8Array, data: Uint8Array): Uint8Array {
var source = changetype<Bytes>(data);
let reserve0 = source.slice(31, 32);
let reserve1 = source.slice(63, 64);
export function handleEvent(
esig: Uint8Array,
topic1: Uint8Array,
topic2: Uint8Array,
topic3: Uint8Array,
data: Uint8Array
): Uint8Array {
var source = changetype<Bytes>(data);
let reserve0 = source.slice(31, 32);
let reserve1 = source.slice(63, 64);

let state = Bytes.new(32);
state[31] = reserve0.toU32() / reserve1.toU32();
return state as Uint8Array;
}
let state = Bytes.new(32);
state[31] = reserve0.toU32() / reserve1.toU32();
return state as Uint8Array;
}
24 changes: 23 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@
"name": "zkgraph",
"scripts": {
"test": "asc demo-uniswap-v2-idx-zkgraph/mapping.ts -o build/mapping.wasm --bindings esm && node src/test.js",
"compile": "asc main.ts --lib ./demo-uniswap-v2-idx-zkgraph -t build/main.wat -O --noAssert -o build/main.wasm --disable bulk-memory --use abort=sdk/zkwasm/abort --target release --runtime stub"
"compile": "asc main.ts --lib ./demo-uniswap-v2-idx-zkgraph -t build/main.wat -O --noAssert -o build/main.wasm --disable bulk-memory --use abort=sdk/zkwasm/abort --target release --runtime stub",
"format": "prettier --write -c **/*.{js,ts}",
"lint": "prettier -c **/*.{js,ts}"
},
"type": "module",
"dependencies": {
"ethers": "^5.7.2"
},
"devDependencies": {
"assemblyscript": "^0.27.0"
"assemblyscript": "^0.27.0",
"prettier": "2.8.8"
}
}
154 changes: 80 additions & 74 deletions sdk/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,99 +2,105 @@
* dereference helper
*/
class PtrDeref {
data: usize
static read(ptr: usize): usize {
return changetype<PtrDeref>(ptr).data;
}
static write(ptr: usize, val: usize): void {
changetype<PtrDeref>(ptr).data = val;
}
data: usize;
static read(ptr: usize): usize {
return changetype<PtrDeref>(ptr).data;
}
static write(ptr: usize, val: usize): void {
changetype<PtrDeref>(ptr).data = val;
}
}

let _available_ptr:usize = 10000; // in js local: max mem size == 65535 (guess)
function _static_alloc(_len:usize):usize{
var _pre_ptr = _available_ptr
_available_ptr += _len
return _pre_ptr
let _available_ptr: usize = 10000; // in js local: max mem size == 65535 (guess)
function _static_alloc(_len: usize): usize {
var _pre_ptr = _available_ptr;
_available_ptr += _len;
return _pre_ptr;
}

/**
* Bytes class
* Uint8Array with clean 'new' and fill without memory.fill
*/
export class Bytes extends Uint8Array {
// clean/unsafe version of new Array<u8>(_len)
// clean/unsafe version of new Array<u8>(_len)

static new(_len: i32): Bytes {
var _bytes_ptr = _static_alloc(12)
var _arr_data_ptr = _static_alloc(_len)
// write data ptr to the 0th, 1st fields of Array<u8>
PtrDeref.write(_bytes_ptr, _arr_data_ptr);
PtrDeref.write(_bytes_ptr + 4, _arr_data_ptr);
PtrDeref.write(_bytes_ptr + 8, _len);
// _available_ptr += (12+_len)
// _available_ptr += 2 // just for nop
var _bytes = changetype<Bytes>(_bytes_ptr);
// write data len to the 2nd, 3rd fields of Array<u8>, equivalent to .length=_len
return _bytes;
}
static new(_len: i32): Bytes {
var _bytes_ptr = _static_alloc(12);
var _arr_data_ptr = _static_alloc(_len);
// write data ptr to the 0th, 1st fields of Array<u8>
PtrDeref.write(_bytes_ptr, _arr_data_ptr);
PtrDeref.write(_bytes_ptr + 4, _arr_data_ptr);
PtrDeref.write(_bytes_ptr + 8, _len);
// _available_ptr += (12+_len)
// _available_ptr += 2 // just for nop
var _bytes = changetype<Bytes>(_bytes_ptr);
// write data len to the 2nd, 3rd fields of Array<u8>, equivalent to .length=_len
return _bytes;
}

static from_rawarr_ptr(_arr_heap_ptr:usize, _len:i32): Bytes{
// var _bytes_ptr = heap.alloc(12); // size of Uint8Array == 3*4 == 12
var _bytes_ptr = _static_alloc(12)
PtrDeref.write(_bytes_ptr, _arr_heap_ptr);
PtrDeref.write(_bytes_ptr + 4, _arr_heap_ptr);
PtrDeref.write(_bytes_ptr + 8, _len);
return changetype<Bytes>(_bytes_ptr);
}
static fromRawarrPtr(_arr_heap_ptr: usize, _len: i32): Bytes {
// var _bytes_ptr = heap.alloc(12); // size of Uint8Array == 3*4 == 12
var _bytes_ptr = _static_alloc(12);
PtrDeref.write(_bytes_ptr, _arr_heap_ptr);
PtrDeref.write(_bytes_ptr + 4, _arr_heap_ptr);
PtrDeref.write(_bytes_ptr + 8, _len);
return changetype<Bytes>(_bytes_ptr);
}

to_rawarr_ptr(): usize{
return PtrDeref.read(changetype<usize>(this));
toRawarrPtr(): usize {
return PtrDeref.read(changetype<usize>(this));
}

fill(_val: u8 = 0): void {
for (var i: i32 = 0; i < this.length; i++) {
this[i] = _val;
}
// this.arr.fill(_val)
}

fill(_val: u8 = 0): void {
for (var i: i32 = 0; i < this.length; i++) {
this[i] = _val;
}
// this.arr.fill(_val)
slice(start: i32, end: i32): Bytes {
if (
start < 0 ||
end < 0 ||
start > this.length ||
end > this.length ||
start >= end
) {
return Bytes.new(0);
// throw new Error("Invalid slice parameters");
}

slice(start: i32, end: i32): Bytes {
if (start < 0 || end < 0 || start > this.length || end > this.length || start >= end) {
return Bytes.new(0);
// throw new Error("Invalid slice parameters");
}
const len = end - start;
var dst = Bytes.new(len);
for (let i: i32 = 0; i < len; i++) {
dst[i] = this[start + i];
}

const len = end - start;
var dst = Bytes.new(len);
for (let i: i32 = 0; i < len; i++) {
dst[i] = this[start + i];
}
return dst;
}

return dst
toU32(): u32 {
assert(this.length <= 4);
var rst: u32 = 0;
for (var i = 0; i < min(4, this.length); i++) {
rst = rst << 8;
rst += this[i];
}
return rst;
}

toU32(): u32 {
assert(this.length <= 4);
var rst: u32 = 0;
for (var i = 0; i < min(4, this.length); i++) {
rst = rst << 8;
rst += this[i];
}
return rst;
@operator("==")
__opeq(right: Bytes): bool {
if (this.length != right.length) {
// console.log(this.length.toString() + '---' + right.length.toString());
return false;
}

@operator('==')
__opeq(right: Bytes): bool {
if (this.length != right.length) {
// console.log(this.length.toString() + '---' + right.length.toString());
return false;
}
for (var i = 0; i < this.length; i++) {
if (this[i] != right[i]) {
return false;
}
}
return true;
for (var i = 0; i < this.length; i++) {
if (this[i] != right[i]) {
return false;
}
}

return true;
}
}
9 changes: 9 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"extends": "./node_modules/assemblyscript/std/assembly.json",
"include": [
"./**/*.ts"
],
"compilerOptions": {
"strictBindCallApply": false
}
}

0 comments on commit 7ba5b84

Please sign in to comment.