Skip to content

Commit

Permalink
refactor code metadata byte info
Browse files Browse the repository at this point in the history
  • Loading branch information
michavie committed Nov 17, 2023
1 parent 8540bc7 commit eebfd33
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 26 deletions.
15 changes: 9 additions & 6 deletions src/smartcontracts/codeMetadata.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { assert } from "chai";
import { CodeMetadata, ByteZero, ByteOne } from "./codeMetadata";
import { CodeMetadata } from "./codeMetadata";

describe("CodeMetadata Class Tests", function() {
it("should create a default CodeMetadata instance", function() {
Expand Down Expand Up @@ -28,12 +28,15 @@ describe("CodeMetadata Class Tests", function() {
const buffer = metadata.toBuffer();

assert.equal(buffer.length, 2);
assert.equal(buffer[0], ByteZero.Upgradeable | ByteZero.Readable);
assert.equal(buffer[1], ByteOne.Payable | ByteOne.PayableBySc);
assert.equal(buffer[0], CodeMetadata.ByteZero.Upgradeable | CodeMetadata.ByteZero.Readable);
assert.equal(buffer[1], CodeMetadata.ByteOne.Payable | CodeMetadata.ByteOne.PayableBySc);
});

it("should create from buffer correctly when all flags are set", function() {
const buffer = Buffer.from([ByteZero.Upgradeable | ByteZero.Readable, ByteOne.Payable | ByteOne.PayableBySc]);
const buffer = Buffer.from([
CodeMetadata.ByteZero.Upgradeable | CodeMetadata.ByteZero.Readable,
CodeMetadata.ByteOne.Payable | CodeMetadata.ByteOne.PayableBySc,
]);
const metadata = CodeMetadata.fromBuffer(buffer);

assert.isTrue(metadata.upgradeable);
Expand All @@ -43,7 +46,7 @@ describe("CodeMetadata Class Tests", function() {
});

it.only("should create from buffer correctly when some flags are set", function() {
const buffer = Buffer.from([ByteZero.Upgradeable, ByteOne.PayableBySc]);
const buffer = Buffer.from([CodeMetadata.ByteZero.Upgradeable, CodeMetadata.ByteOne.PayableBySc]);
const metadata = CodeMetadata.fromBuffer(buffer);

assert.isTrue(metadata.upgradeable);
Expand All @@ -53,7 +56,7 @@ describe("CodeMetadata Class Tests", function() {
});

it("should handle buffer too short error", function() {
const buffer = Buffer.from([ByteZero.Upgradeable]);
const buffer = Buffer.from([CodeMetadata.ByteZero.Upgradeable]);

assert.throws(() => {
CodeMetadata.fromBuffer(buffer);
Expand Down
40 changes: 20 additions & 20 deletions src/smartcontracts/codeMetadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ export class CodeMetadata {
public payable: boolean;
public payableBySc: boolean;

static ByteZero = {
Upgradeable: 1,
Reserved2: 2,
Readable: 4
};

static ByteOne = {
Reserved1: 1,
Payable: 2,
PayableBySc: 4
};

/**
* Creates a metadata object. By default, set the `upgradeable` attribute, and uset all others.
*
Expand All @@ -33,10 +45,10 @@ export class CodeMetadata {
const byteZero = buffer[0];
const byteOne = buffer[1];

const upgradeable = (byteZero & ByteZero.Upgradeable) !== 0;
const readable = (byteZero & ByteZero.Readable) !== 0;
const payable = (byteOne & ByteOne.Payable) !== 0;
const payableBySc = (byteOne & ByteOne.PayableBySc) !== 0;
const upgradeable = (byteZero & CodeMetadata.ByteZero.Upgradeable) !== 0;
const readable = (byteZero & CodeMetadata.ByteZero.Readable) !== 0;
const payable = (byteOne & CodeMetadata.ByteOne.Payable) !== 0;
const payableBySc = (byteOne & CodeMetadata.ByteOne.PayableBySc) !== 0;

return new CodeMetadata(upgradeable, readable, payable, payableBySc);
}
Expand Down Expand Up @@ -77,16 +89,16 @@ export class CodeMetadata {
let byteOne = 0;

if (this.upgradeable) {
byteZero |= ByteZero.Upgradeable;
byteZero |= CodeMetadata.ByteZero.Upgradeable;
}
if (this.readable) {
byteZero |= ByteZero.Readable;
byteZero |= CodeMetadata.ByteZero.Readable;
}
if (this.payable) {
byteOne |= ByteOne.Payable;
byteOne |= CodeMetadata.ByteOne.Payable;
}
if (this.payableBySc) {
byteOne |= ByteOne.PayableBySc;
byteOne |= CodeMetadata.ByteOne.PayableBySc;
}

return Buffer.from([byteZero, byteOne]);
Expand Down Expand Up @@ -118,15 +130,3 @@ export class CodeMetadata {
this.payableBySc == other.payableBySc;
}
}

export enum ByteZero {
Upgradeable = 1,
Reserved2 = 2,
Readable = 4
}

export enum ByteOne {
Reserved1 = 1,
Payable = 2,
PayableBySc = 4
}

0 comments on commit eebfd33

Please sign in to comment.