diff --git a/convex-core/src/main/java/convex/core/cvm/Address.java b/convex-core/src/main/java/convex/core/cvm/Address.java index 19827421d..cb67101a5 100644 --- a/convex-core/src/main/java/convex/core/cvm/Address.java +++ b/convex-core/src/main/java/convex/core/cvm/Address.java @@ -8,7 +8,6 @@ import convex.core.data.Blob; import convex.core.data.Format; import convex.core.data.Strings; -import convex.core.data.Tag; import convex.core.data.prim.CVMLong; import convex.core.data.type.AType; import convex.core.data.type.Types; @@ -191,7 +190,7 @@ public static Address read(Blob b, int pos) throws BadFormatException { @Override public int encode(byte[] bs, int pos) { - bs[pos++]=Tag.ADDRESS; + bs[pos++]=CVMTag.ADDRESS; return encodeRaw(bs,pos); } @@ -234,7 +233,7 @@ public Blob toFlatBlob() { @Override public byte getTag() { - return Tag.ADDRESS; + return CVMTag.ADDRESS; } @Override diff --git a/convex-core/src/main/java/convex/core/cvm/CVMTag.java b/convex-core/src/main/java/convex/core/cvm/CVMTag.java new file mode 100644 index 000000000..503c8db0e --- /dev/null +++ b/convex-core/src/main/java/convex/core/cvm/CVMTag.java @@ -0,0 +1,23 @@ +package convex.core.cvm; + +/** + * Class defining tags for CVM CAD3 extension types + */ +public class CVMTag { + + /** + * Tag for Convex Address type + */ + public static final byte ADDRESS = (byte) 0xEA; + + /** + * CVM Core definitions + */ + public static final byte CORE_DEF = (byte) 0xED; + + /** + * Special Ops + */ + public static final byte SPECIAL_OP = (byte) 0xE5; + +} diff --git a/convex-core/src/main/java/convex/core/data/CAD3Encoder.java b/convex-core/src/main/java/convex/core/data/CAD3Encoder.java index 951a357df..689b47503 100644 --- a/convex-core/src/main/java/convex/core/data/CAD3Encoder.java +++ b/convex-core/src/main/java/convex/core/data/CAD3Encoder.java @@ -1,6 +1,7 @@ package convex.core.data; import convex.core.cvm.Address; +import convex.core.cvm.CVMTag; import convex.core.data.prim.AByteFlag; import convex.core.data.prim.ANumeric; import convex.core.data.prim.CVMBigInteger; @@ -44,7 +45,7 @@ protected ACell read(byte tag, Blob encoding, int offset) throws BadFormatExcept return readNumeric(tag,encoding,offset); case 2: // 0x20-0x2F : Addresses and references - if (tag == Tag.ADDRESS) return Address.read(encoding,offset); + if (tag == CVMTag.ADDRESS) return Address.read(encoding,offset); // Note: 0x20 reference is invalid as a top level encoding break; diff --git a/convex-core/src/main/java/convex/core/data/CVMEncoder.java b/convex-core/src/main/java/convex/core/data/CVMEncoder.java index 2f5fcbfa4..b2e0af8b1 100644 --- a/convex-core/src/main/java/convex/core/data/CVMEncoder.java +++ b/convex-core/src/main/java/convex/core/data/CVMEncoder.java @@ -1,5 +1,7 @@ package convex.core.data; +import convex.core.cvm.Address; +import convex.core.cvm.CVMTag; import convex.core.exceptions.BadFormatException; import convex.core.lang.Core; @@ -18,7 +20,8 @@ public ACell read(Blob encoding,int offset) throws BadFormatException { protected ACell readExtension(byte tag, Blob blob, int offset) throws BadFormatException { // We expect a VLQ Count following the tag long code=Format.readVLQCount(blob,offset+1); - if (tag == Tag.CORE_DEF) return Core.fromCode(code); + if (tag == CVMTag.CORE_DEF) return Core.fromCode(code); + if (tag == CVMTag.ADDRESS) return Address.create(code); return ExtensionValue.create(tag, code); } diff --git a/convex-core/src/main/java/convex/core/data/Format.java b/convex-core/src/main/java/convex/core/data/Format.java index 108cc82c9..3ef80fab9 100644 --- a/convex-core/src/main/java/convex/core/data/Format.java +++ b/convex-core/src/main/java/convex/core/data/Format.java @@ -16,6 +16,7 @@ import convex.core.cvm.AFn; import convex.core.cvm.AccountStatus; import convex.core.cvm.Address; +import convex.core.cvm.CVMTag; import convex.core.cvm.Ops; import convex.core.cvm.PeerStatus; import convex.core.cvm.Receipt; @@ -518,7 +519,7 @@ private static ACell readExtension(byte tag, Blob blob, int offset) throws BadFo // We expect a VLQ Count following the tag long code=readVLQCount(blob,offset+1); - if (tag == Tag.CORE_DEF) return Core.fromCode(code); + if (tag == CVMTag.CORE_DEF) return Core.fromCode(code); return ExtensionValue.create(tag, code); } @@ -594,7 +595,7 @@ static T read(byte tag, Blob blob, int offset) throws BadForma if (high == 0x30) return (T) readBasicObject(tag,blob,offset); - if (tag == Tag.ADDRESS) return (T) Address.read(blob,offset); + if (tag == CVMTag.ADDRESS) return (T) Address.read(blob,offset); if (high == 0xB0) return (T) AByteFlag.read(tag); diff --git a/convex-core/src/main/java/convex/core/data/Tag.java b/convex-core/src/main/java/convex/core/data/Tag.java index 537ac9f9c..c2d3d781b 100644 --- a/convex-core/src/main/java/convex/core/data/Tag.java +++ b/convex-core/src/main/java/convex/core/data/Tag.java @@ -30,7 +30,7 @@ public class Tag { // crypto and security primitives public static final byte REF = (byte) 0x20; - public static final byte ADDRESS = (byte) 0x21; + // ========================================= // Strings and Blobs (0x3x) @@ -121,13 +121,6 @@ public class Tag { public static final byte EXTENSION_VALUE_BASE = (byte) 0xE0; - // CVM Core definitions - public static final byte CORE_DEF = (byte) 0xED; - - // Special Ops - public static final byte SPECIAL_OP = (byte) 0xE5; - - //=========================================== // Illegal / reserved for special values (0xFx) public static final byte ILLEGAL = (byte) 0xFF; diff --git a/convex-core/src/main/java/convex/core/lang/impl/CoreFn.java b/convex-core/src/main/java/convex/core/lang/impl/CoreFn.java index 0056207a6..c0ec6c830 100644 --- a/convex-core/src/main/java/convex/core/lang/impl/CoreFn.java +++ b/convex-core/src/main/java/convex/core/lang/impl/CoreFn.java @@ -1,13 +1,13 @@ package convex.core.lang.impl; import convex.core.cvm.AFn; +import convex.core.cvm.CVMTag; import convex.core.cvm.Context; import convex.core.data.ACell; import convex.core.data.Format; import convex.core.data.IRefFunction; import convex.core.data.Ref; import convex.core.data.Symbol; -import convex.core.data.Tag; import convex.core.data.util.BlobBuilder; import convex.core.exceptions.InvalidDataException; @@ -47,7 +47,7 @@ public Symbol getIntrinsicSymbol() { } public byte getTag() { - return Tag.CORE_DEF; + return CVMTag.CORE_DEF; } protected String name() { @@ -94,7 +94,7 @@ public boolean print(BlobBuilder sb, long limit) { @Override public int encode(byte[] bs, int pos) { - bs[pos++]=Tag.CORE_DEF; + bs[pos++]=CVMTag.CORE_DEF; return encodeRaw(bs,pos); } diff --git a/convex-core/src/test/java/convex/core/data/AddressTest.java b/convex-core/src/test/java/convex/core/cvm/AddressTest.java similarity index 74% rename from convex-core/src/test/java/convex/core/data/AddressTest.java rename to convex-core/src/test/java/convex/core/cvm/AddressTest.java index 80c7662f7..35d7cad6a 100644 --- a/convex-core/src/test/java/convex/core/data/AddressTest.java +++ b/convex-core/src/test/java/convex/core/cvm/AddressTest.java @@ -1,4 +1,4 @@ -package convex.core.data; +package convex.core.cvm; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; @@ -6,7 +6,14 @@ import org.junit.jupiter.api.Test; -import convex.core.cvm.Address; +import convex.core.data.ACell; +import convex.core.data.Blob; +import convex.core.data.Blobs; +import convex.core.data.BlobsTest; +import convex.core.data.Format; +import convex.core.data.ObjectsTest; +import convex.core.exceptions.BadFormatException; +import convex.core.util.Utils; public class AddressTest { @@ -27,6 +34,16 @@ public void testAddress2() { assertEquals("#13",a1.toString()); } + @Test + public void testEncoding() throws BadFormatException { + Address a= Address.create(17); + Blob enc=a.getEncoding(); + assertEquals(Utils.toHexString(CVMTag.ADDRESS)+"11",enc.toHexString()); + ACell ra=Format.read(enc); + assertTrue(ra instanceof Address); + assertEquals(a,ra); + } + @Test public void testParse() { assertEquals("#1",Address.parse("#1").toString()); diff --git a/convex-core/src/test/java/convex/core/data/CAD3Test.java b/convex-core/src/test/java/convex/core/data/CAD3Test.java index 1ccebe29a..d0430f1c2 100644 --- a/convex-core/src/test/java/convex/core/data/CAD3Test.java +++ b/convex-core/src/test/java/convex/core/data/CAD3Test.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.TestInstance.Lifecycle; import convex.core.cvm.Address; +import convex.core.cvm.CVMTag; import convex.core.cvm.Context; import convex.core.data.prim.CVMLong; import convex.core.lang.ACVMTest; @@ -34,11 +35,11 @@ public class CAD3Test extends ACVMTest { } @Test public void testExtensionCoreDefs() { - assertSame(Core.VECTOR,Reader.read("#["+Utils.toHexString(Tag.CORE_DEF)+"01]")); + assertSame(Core.VECTOR,Reader.read("#["+Utils.toHexString(CVMTag.CORE_DEF)+"01]")); } @Test public void testReadEncodings() { - assertSame(Address.ZERO,Reader.read("#[2100]")); + assertSame(Address.ZERO,Reader.read("#[EA00]")); assertSame(CVMLong.ZERO,Reader.read("#[10]")); assertSame(Vectors.empty(),Reader.read("#[8000]")); assertNull(Reader.read("#[00]"));