Skip to content

Commit b2e26e3

Browse files
committedJul 15, 2019
modify built-in array implementation
1 parent 4cd2615 commit b2e26e3

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed
 

‎index.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
/// <reference path="./node_modules/dmcscript/std/assembly/index.d.ts" />
2-
/// <reference path="./node_modules/dmcscript/std/assembly/alias.d.ts" />
2+
/// <reference path="./node_modules/dmcscript/std/assembly/alias.d.ts" />

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@
2626
"dependencies": {
2727
"dmcscript": "^0.1.6"
2828
}
29-
}
29+
}

‎src/action.ts

+19-17
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { Address } from "./address";
22
import { Assert } from "./system";
33
import { RIPEMD160_LEN, SHA256_LEN, SHA512_LEN } from "../lib/constant";
4-
import { getActionName, getActionData, hasAuth, requireAuth, callAction, returnData, returnU64 } from "../internal/action.d";
4+
import { getActionName, getActionData, hasAuth, requireAuth, callAction, returnData, returnU64, getValue } from "../internal/action.d";
55
import { BytesToString, EncodeSLEB128, EncodeULEB128, StringToBytes, StringToUsize } from "../lib/codec";
66
import { U8ArrayToBytes, CreateDataStream, BytesToU8Array, } from "../lib/helper";
7-
import { Asset } from "./asset";
7+
import { Asset, UNIT } from "./asset";
88

99
/**
1010
* Builtin represents a parameter with built-in type.
@@ -131,25 +131,18 @@ export class Builtin implements Serializable {
131131
/**
132132
* BuiltinArray represents an array of parameters with built-in types,
133133
* like 'string[]', 'u64[]'
134+
*
134135
*/
135-
export class BuiltinArray extends Builtin implements Serializable {
136-
_params: Builtin[]
137-
138-
constructor(params: Builtin[]) {
139-
super(new Bytes(0));
140-
this._params = params;
141-
}
142-
143-
len(): i32 {
144-
return this._params.length
145-
}
146-
136+
export class BuiltinArray extends Array<Builtin> implements Serializable {
147137
serialize(ds: DataStream): void {
148-
ds.writeComplexVector<Builtin>(this._params);
138+
ds.writeComplexVector<Builtin>(this);
149139
}
150140

151141
deserialize(ds: DataStream): void {
152-
this._params = ds.readComplexVector<Builtin>();
142+
const arr = ds.readComplexVector<Builtin>();
143+
for (let i = 0; i < arr.length; i++) {
144+
this.push(arr[i]);
145+
}
153146
}
154147

155148
key(): string {
@@ -186,6 +179,14 @@ export class Action implements Serializable {
186179
return ds;
187180
}
188181

182+
static getValue(): Asset {
183+
const size = getValue(0, 0);
184+
const ds = CreateDataStream(size);
185+
getValue(ds.buffer, ds.len);
186+
const amount = ds.read<u64>();
187+
return new Asset(amount, UNIT);
188+
}
189+
189190
send(): void {
190191
Assert(this._method != "__DEPLOY__", "action name should not be '__DEPLOY__'");
191192
const size = DataStream.measure<Action>(this);
@@ -201,7 +202,7 @@ export class Action implements Serializable {
201202
this._value.serialize(ds);
202203
// fill the method of action
203204
ds.writeString(this._method);
204-
let payloadSize = 0;
205+
let payloadSize: u64 = 0;
205206
// fill serialized payload field
206207
for (let i = 0; i < this._payload.length; i++) {
207208
const param = this._payload[i];
@@ -213,6 +214,7 @@ export class Action implements Serializable {
213214
throw new Error("unknown parameters type");
214215
}
215216
}
217+
ds.write<u64>(payloadSize);
216218
for (let i = 0; i < this._payload.length; i++) {
217219
this._payload[i].serialize(ds);
218220
}

0 commit comments

Comments
 (0)
Please sign in to comment.