1 | import { assertContractParameterType, common, IOHelper, JSONHelper, toJSONContractParameterType, } from '@neo-one/client-common-esnext-esm';
|
2 | import { assertContractPropertyState, ContractModel } from '@neo-one/client-full-common-esnext-esm';
|
3 | import { ContractPropertyState } from './ContractPropertyState';
|
4 | import { BinaryReader, utils } from './utils';
|
5 | export class Contract extends ContractModel {
|
6 | constructor() {
|
7 | super(...arguments);
|
8 | this.equals = utils.equals(Contract, this, (other) => common.uInt160Equal(this.hash, other.hash));
|
9 | this.toKeyString = utils.toKeyString(Contract, () => this.hashHex);
|
10 | this.contractSizeInternal = utils.lazy(() => sizeOfContract({
|
11 | script: this.script,
|
12 | parameterList: this.parameterList,
|
13 | name: this.name,
|
14 | codeVersion: this.codeVersion,
|
15 | author: this.author,
|
16 | email: this.email,
|
17 | description: this.description,
|
18 | }));
|
19 | }
|
20 | static deserializeWireBase(options) {
|
21 | return deserializeContractWireBase({
|
22 | context: options.context,
|
23 | reader: options.reader,
|
24 | });
|
25 | }
|
26 | static deserializeWire(options) {
|
27 | return this.deserializeWireBase({
|
28 | context: options.context,
|
29 | reader: new BinaryReader(options.buffer),
|
30 | });
|
31 | }
|
32 | get size() {
|
33 | return this.contractSizeInternal();
|
34 | }
|
35 | serializeJSON(_context) {
|
36 | return {
|
37 | version: this.version,
|
38 | hash: JSONHelper.writeUInt160(this.hash),
|
39 | script: JSONHelper.writeBuffer(this.script),
|
40 | parameters: this.parameterList.map(toJSONContractParameterType),
|
41 | returntype: toJSONContractParameterType(this.returnType),
|
42 | name: this.name,
|
43 | code_version: this.codeVersion,
|
44 | author: this.author,
|
45 | email: this.email,
|
46 | description: this.description,
|
47 | properties: {
|
48 | storage: this.hasStorage,
|
49 | dynamic_invoke: this.hasDynamicInvoke,
|
50 | payable: this.payable,
|
51 | },
|
52 | };
|
53 | }
|
54 | }
|
55 | export const sizeOfContract = ({ script, parameterList, name, codeVersion, author, email, description, publishVersion, }) => IOHelper.sizeOfVarBytesLE(script) +
|
56 | IOHelper.sizeOfVarBytesLE(Buffer.from(parameterList)) +
|
57 | IOHelper.sizeOfUInt8 +
|
58 | (publishVersion === undefined ? IOHelper.sizeOfBoolean : 0) +
|
59 | IOHelper.sizeOfVarString(name) +
|
60 | IOHelper.sizeOfVarString(codeVersion) +
|
61 | IOHelper.sizeOfVarString(author) +
|
62 | IOHelper.sizeOfVarString(email) +
|
63 | IOHelper.sizeOfVarString(description);
|
64 | export const deserializeContractWireBase = ({ reader, publishVersion, }) => {
|
65 | const script = reader.readVarBytesLE();
|
66 | const parameterList = [...reader.readVarBytesLE()].map(assertContractParameterType);
|
67 | const returnType = assertContractParameterType(reader.readUInt8());
|
68 | const contractProperties = publishVersion === undefined || publishVersion >= 1
|
69 | ? assertContractPropertyState(reader.readUInt8())
|
70 | : ContractPropertyState.NoProperty;
|
71 | const name = reader.readVarString(252);
|
72 | const codeVersion = reader.readVarString(252);
|
73 | const author = reader.readVarString(252);
|
74 | const email = reader.readVarString(252);
|
75 | const description = reader.readVarString(65536);
|
76 | return new Contract({
|
77 | script,
|
78 | parameterList,
|
79 | returnType,
|
80 | contractProperties,
|
81 | name,
|
82 | codeVersion,
|
83 | author,
|
84 | email,
|
85 | description,
|
86 | });
|
87 | };
|
88 |
|
89 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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akQsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxPQUFPLElBQUksUUFBUSxDQUFDO1FBQ2xCLE1BQU07UUFDTixhQUFhO1FBQ2IsVUFBVTtRQUNWLGtCQUFrQjtRQUNsQixJQUFJO1FBQ0osV0FBVztRQUNYLE1BQU07UUFDTixLQUFLO1FBQ0wsV0FBVztLQUNaLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsImZpbGUiOiJuZW8tb25lLW5vZGUtY29yZS9zcmMvQ29udHJhY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhc3NlcnRDb250cmFjdFBhcmFtZXRlclR5cGUsXG4gIGNvbW1vbixcbiAgQ29udHJhY3RKU09OLFxuICBJT0hlbHBlcixcbiAgSlNPTkhlbHBlcixcbiAgdG9KU09OQ29udHJhY3RQYXJhbWV0ZXJUeXBlLFxuICBVSW50MTYwLFxufSBmcm9tICdAbmVvLW9uZS9jbGllbnQtY29tbW9uLWVzbmV4dC1lc20nO1xuaW1wb3J0IHsgYXNzZXJ0Q29udHJhY3RQcm9wZXJ0eVN0YXRlLCBDb250cmFjdE1vZGVsIH0gZnJvbSAnQG5lby1vbmUvY2xpZW50LWZ1bGwtY29tbW9uLWVzbmV4dC1lc20nO1xuaW1wb3J0IHsgQ29udHJhY3RQYXJhbWV0ZXJUeXBlIH0gZnJvbSAnLi9jb250cmFjdFBhcmFtZXRlcic7XG5pbXBvcnQgeyBDb250cmFjdFByb3BlcnR5U3RhdGUgfSBmcm9tICcuL0NvbnRyYWN0UHJvcGVydHlTdGF0ZSc7XG5pbXBvcnQgeyBFcXVhbHMsIEVxdWF0YWJsZUtleSB9IGZyb20gJy4vRXF1YXRhYmxlJztcbmltcG9ydCB7XG4gIERlc2VyaWFsaXplV2lyZUJhc2VPcHRpb25zLFxuICBEZXNlcmlhbGl6ZVdpcmVPcHRpb25zLFxuICBTZXJpYWxpemFibGVKU09OLFxuICBTZXJpYWxpemVKU09OQ29udGV4dCxcbn0gZnJvbSAnLi9TZXJpYWxpemFibGUnO1xuaW1wb3J0IHsgQmluYXJ5UmVhZGVyLCB1dGlscyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyYWN0S2V5IHtcbiAgcmVhZG9ubHkgaGFzaDogVUludDE2MDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJhY3RBZGQge1xuICByZWFkb25seSBoYXNoPzogVUludDE2MDtcbiAgcmVhZG9ubHkgdmVyc2lvbj86IG51bWJlcjtcbiAgcmVhZG9ubHkgc2NyaXB0OiBCdWZmZXI7XG4gIHJlYWRvbmx5IHBhcmFtZXRlckxpc3Q6IFJlYWRvbmx5QXJyYXk8Q29udHJhY3RQYXJhbWV0ZXJUeXBlPjtcbiAgcmVhZG9ubHkgcmV0dXJuVHlwZTogQ29udHJhY3RQYXJhbWV0ZXJUeXBlO1xuICByZWFkb25seSBjb250cmFjdFByb3BlcnRpZXM6IENvbnRyYWN0UHJvcGVydHlTdGF0ZTtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBjb2RlVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcbiAgcmVhZG9ubHkgZW1haWw6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3RNb2RlbCBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZUpTT048Q29udHJhY3RKU09OPiwgRXF1YXRhYmxlS2V5IHtcbiAgcHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZVdpcmVCYXNlKG9wdGlvbnM6IERlc2VyaWFsaXplV2lyZUJhc2VPcHRpb25zKTogQ29udHJhY3Qge1xuICAgIHJldHVybiBkZXNlcmlhbGl6ZUNvbnRyYWN0V2lyZUJhc2Uoe1xuICAgICAgY29udGV4dDogb3B0aW9ucy5jb250ZXh0LFxuICAgICAgcmVhZGVyOiBvcHRpb25zLnJlYWRlcixcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemVXaXJlKG9wdGlvbnM6IERlc2VyaWFsaXplV2lyZU9wdGlvbnMpOiBDb250cmFjdCB7XG4gICAgcmV0dXJuIHRoaXMuZGVzZXJpYWxpemVXaXJlQmFzZSh7XG4gICAgICBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXG4gICAgICByZWFkZXI6IG5ldyBCaW5hcnlSZWFkZXIob3B0aW9ucy5idWZmZXIpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGVxdWFsczogRXF1YWxzID0gdXRpbHMuZXF1YWxzKENvbnRyYWN0LCB0aGlzLCAob3RoZXIpID0+IGNvbW1vbi51SW50MTYwRXF1YWwodGhpcy5oYXNoLCBvdGhlci5oYXNoKSk7XG4gIHB1YmxpYyByZWFkb25seSB0b0tleVN0cmluZyA9IHV0aWxzLnRvS2V5U3RyaW5nKENvbnRyYWN0LCAoKSA9PiB0aGlzLmhhc2hIZXgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyYWN0U2l6ZUludGVybmFsID0gdXRpbHMubGF6eSgoKSA9PlxuICAgIHNpemVPZkNvbnRyYWN0KHtcbiAgICAgIHNjcmlwdDogdGhpcy5zY3JpcHQsXG4gICAgICBwYXJhbWV0ZXJMaXN0OiB0aGlzLnBhcmFtZXRlckxpc3QsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBjb2RlVmVyc2lvbjogdGhpcy5jb2RlVmVyc2lvbixcbiAgICAgIGF1dGhvcjogdGhpcy5hdXRob3IsXG4gICAgICBlbWFpbDogdGhpcy5lbWFpbCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgIH0pLFxuICApO1xuXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnRyYWN0U2l6ZUludGVybmFsKCk7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplSlNPTihfY29udGV4dDogU2VyaWFsaXplSlNPTkNvbnRleHQpOiBDb250cmFjdEpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBoYXNoOiBKU09OSGVscGVyLndyaXRlVUludDE2MCh0aGlzLmhhc2gpLFxuICAgICAgc2NyaXB0OiBKU09OSGVscGVyLndyaXRlQnVmZmVyKHRoaXMuc2NyaXB0KSxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVyTGlzdC5tYXAodG9KU09OQ29udHJhY3RQYXJhbWV0ZXJUeXBlKSxcblxuICAgICAgcmV0dXJudHlwZTogdG9KU09OQ29udHJhY3RQYXJhbWV0ZXJUeXBlKHRoaXMucmV0dXJuVHlwZSksXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBjb2RlX3ZlcnNpb246IHRoaXMuY29kZVZlcnNpb24sXG4gICAgICBhdXRob3I6IHRoaXMuYXV0aG9yLFxuICAgICAgZW1haWw6IHRoaXMuZW1haWwsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3RvcmFnZTogdGhpcy5oYXNTdG9yYWdlLFxuICAgICAgICBkeW5hbWljX2ludm9rZTogdGhpcy5oYXNEeW5hbWljSW52b2tlLFxuICAgICAgICBwYXlhYmxlOiB0aGlzLnBheWFibGUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNpemVPZkNvbnRyYWN0ID0gKHtcbiAgc2NyaXB0LFxuICBwYXJhbWV0ZXJMaXN0LFxuICBuYW1lLFxuICBjb2RlVmVyc2lvbixcbiAgYXV0aG9yLFxuICBlbWFpbCxcbiAgZGVzY3JpcHRpb24sXG4gIHB1Ymxpc2hWZXJzaW9uLFxufToge1xuICByZWFkb25seSBzY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVhZG9ubHkgcGFyYW1ldGVyTGlzdDogUmVhZG9ubHlBcnJheTxDb250cmFjdFBhcmFtZXRlclR5cGU+O1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvZGVWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuICByZWFkb25seSBlbWFpbDogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwdWJsaXNoVmVyc2lvbj86IG51bWJlcjtcbn0pID0+XG4gIElPSGVscGVyLnNpemVPZlZhckJ5dGVzTEUoc2NyaXB0KSArXG4gIElPSGVscGVyLnNpemVPZlZhckJ5dGVzTEUoQnVmZmVyLmZyb20ocGFyYW1ldGVyTGlzdCBhcyBDb250cmFjdFBhcmFtZXRlclR5cGVbXSkpICtcbiAgSU9IZWxwZXIuc2l6ZU9mVUludDggK1xuICAocHVibGlzaFZlcnNpb24gPT09IHVuZGVmaW5lZCA/IElPSGVscGVyLnNpemVPZkJvb2xlYW4gOiAwKSArXG4gIElPSGVscGVyLnNpemVPZlZhclN0cmluZyhuYW1lKSArXG4gIElPSGVscGVyLnNpemVPZlZhclN0cmluZyhjb2RlVmVyc2lvbikgK1xuICBJT0hlbHBlci5zaXplT2ZWYXJTdHJpbmcoYXV0aG9yKSArXG4gIElPSGVscGVyLnNpemVPZlZhclN0cmluZyhlbWFpbCkgK1xuICBJT0hlbHBlci5zaXplT2ZWYXJTdHJpbmcoZGVzY3JpcHRpb24pO1xuXG5leHBvcnQgY29uc3QgZGVzZXJpYWxpemVDb250cmFjdFdpcmVCYXNlID0gKHtcbiAgcmVhZGVyLFxuICBwdWJsaXNoVmVyc2lvbixcbn06IHtcbiAgcmVhZG9ubHkgcHVibGlzaFZlcnNpb24/OiBudW1iZXI7XG59ICYgRGVzZXJpYWxpemVXaXJlQmFzZU9wdGlvbnMpOiBDb250cmFjdCA9PiB7XG4gIGNvbnN0IHNjcmlwdCA9IHJlYWRlci5yZWFkVmFyQnl0ZXNMRSgpO1xuICBjb25zdCBwYXJhbWV0ZXJMaXN0ID0gWy4uLnJlYWRlci5yZWFkVmFyQnl0ZXNMRSgpXS5tYXAoYXNzZXJ0Q29udHJhY3RQYXJhbWV0ZXJUeXBlKTtcblxuICBjb25zdCByZXR1cm5UeXBlID0gYXNzZXJ0Q29udHJhY3RQYXJhbWV0ZXJUeXBlKHJlYWRlci5yZWFkVUludDgoKSk7XG4gIGNvbnN0IGNvbnRyYWN0UHJvcGVydGllcyA9XG4gICAgcHVibGlzaFZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCBwdWJsaXNoVmVyc2lvbiA+PSAxXG4gICAgICA/IGFzc2VydENvbnRyYWN0UHJvcGVydHlTdGF0ZShyZWFkZXIucmVhZFVJbnQ4KCkpXG4gICAgICA6IENvbnRyYWN0UHJvcGVydHlTdGF0ZS5Ob1Byb3BlcnR5O1xuICBjb25zdCBuYW1lID0gcmVhZGVyLnJlYWRWYXJTdHJpbmcoMjUyKTtcbiAgY29uc3QgY29kZVZlcnNpb24gPSByZWFkZXIucmVhZFZhclN0cmluZygyNTIpO1xuICBjb25zdCBhdXRob3IgPSByZWFkZXIucmVhZFZhclN0cmluZygyNTIpO1xuICBjb25zdCBlbWFpbCA9IHJlYWRlci5yZWFkVmFyU3RyaW5nKDI1Mik7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gcmVhZGVyLnJlYWRWYXJTdHJpbmcoNjU1MzYpO1xuXG4gIHJldHVybiBuZXcgQ29udHJhY3Qoe1xuICAgIHNjcmlwdCxcbiAgICBwYXJhbWV0ZXJMaXN0LFxuICAgIHJldHVyblR5cGUsXG4gICAgY29udHJhY3RQcm9wZXJ0aWVzLFxuICAgIG5hbWUsXG4gICAgY29kZVZlcnNpb24sXG4gICAgYXV0aG9yLFxuICAgIGVtYWlsLFxuICAgIGRlc2NyaXB0aW9uLFxuICB9KTtcbn07XG4iXX0=
|