diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfo.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfo.java index ac69724..cbe8327 100644 --- a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfo.java +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfo.java @@ -5,7 +5,8 @@ public class AccountInfo { private Long nonce; - private Long refcount; + private Long consumers; + private Long providers; private AccountData data; public Long getNonce() { @@ -16,12 +17,20 @@ public void setNonce(Long nonce) { this.nonce = nonce; } - public Long getRefcount() { - return refcount; + public Long getConsumers() { + return consumers; } - public void setRefcount(Long refcount) { - this.refcount = refcount; + public void setConsumers(Long consumers) { + this.consumers = consumers; + } + + public Long getProviders() { + return providers; + } + + public void setProviders(Long providers) { + this.providers = providers; } public AccountData getData() { @@ -38,12 +47,13 @@ public boolean equals(Object o) { if (!(o instanceof AccountInfo)) return false; AccountInfo that = (AccountInfo) o; return Objects.equals(nonce, that.nonce) && - Objects.equals(refcount, that.refcount) && + Objects.equals(consumers, that.consumers) && + Objects.equals(providers, that.providers) && Objects.equals(data, that.data); } @Override public int hashCode() { - return Objects.hash(nonce, refcount, data); + return Objects.hash(nonce, consumers, providers, data); } } diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfoReader.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfoReader.java index b855e95..ad517b1 100644 --- a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfoReader.java +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/AccountInfoReader.java @@ -8,7 +8,8 @@ public class AccountInfoReader implements ScaleReader { public AccountInfo read(ScaleCodecReader rdr) { AccountInfo result = new AccountInfo(); result.setNonce(rdr.readUint32()); - result.setRefcount(rdr.readUint32()); + result.setConsumers(rdr.readUint32()); + result.setProviders(rdr.readUint32()); result.setData(rdr.read(new AccountDataReader())); return result; } diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransfer.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransfer.java index aea9b37..6b2eb0c 100644 --- a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransfer.java +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransfer.java @@ -1,5 +1,6 @@ package io.emeraldpay.polkaj.scaletypes; +import io.emeraldpay.polkaj.scale.UnionValue; import io.emeraldpay.polkaj.types.Address; import io.emeraldpay.polkaj.types.DotAmount; @@ -13,7 +14,7 @@ public class BalanceTransfer extends ExtrinsicCall { /** * Destination address */ - private Address destination; + private UnionValue destination; /** * Balance to transfer */ @@ -43,14 +44,18 @@ public void init(Metadata metadata) { init(call); } - public Address getDestination() { + public UnionValue getDestination() { return destination; } - public void setDestination(Address destination) { + public void setDestination(UnionValue destination) { this.destination = destination; } + public void setDestination(Address destination) { + this.destination = MultiAddress.AccountID.from(destination); + } + public DotAmount getBalance() { return balance; } diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferReader.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferReader.java index fe8f9d0..b12707f 100644 --- a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferReader.java +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferReader.java @@ -8,10 +8,10 @@ public class BalanceTransferReader implements ScaleReader { - private final SS58Type.Network network; + private final MultiAddressReader destinationReader; public BalanceTransferReader(SS58Type.Network network) { - this.network = network; + this.destinationReader = new MultiAddressReader(network); } @Override @@ -19,7 +19,7 @@ public BalanceTransfer read(ScaleCodecReader rdr) { BalanceTransfer result = new BalanceTransfer(); result.setModuleIndex(rdr.readUByte()); result.setCallIndex(rdr.readUByte()); - result.setDestination(new Address(network, rdr.readUint256())); + result.setDestination(rdr.read(destinationReader)); result.setBalance(new DotAmount(rdr.read(ScaleCodecReader.COMPACT_BIGINT))); return result; } diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferWriter.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferWriter.java index 8f83c68..34ca2d1 100644 --- a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferWriter.java +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/BalanceTransferWriter.java @@ -6,12 +6,13 @@ import java.io.IOException; public class BalanceTransferWriter implements ScaleWriter { + private static final MultiAddressWriter DESTINATION_WRITER = new MultiAddressWriter(); @Override public void write(ScaleCodecWriter wrt, BalanceTransfer value) throws IOException { wrt.writeByte(value.getModuleIndex()); wrt.writeByte(value.getCallIndex()); - wrt.writeUint256(value.getDestination().getPubkey()); + wrt.write(DESTINATION_WRITER, value.getDestination()); wrt.write(ScaleCodecWriter.COMPACT_BIGINT, value.getBalance().getValue()); } } diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/Extrinsic.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/Extrinsic.java index 87ca61c..a24d9a4 100644 --- a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/Extrinsic.java +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/Extrinsic.java @@ -1,5 +1,6 @@ package io.emeraldpay.polkaj.scaletypes; +import io.emeraldpay.polkaj.scale.UnionValue; import io.emeraldpay.polkaj.types.Address; import io.emeraldpay.polkaj.types.DotAmount; import io.emeraldpay.polkaj.types.Hash512; @@ -88,7 +89,7 @@ public static class TransactionInfo { /** * Sender */ - private Address sender; + private UnionValue sender; /** * Signature */ @@ -106,14 +107,18 @@ public static class TransactionInfo { */ private DotAmount tip = DotAmount.ZERO; - public Address getSender() { + public UnionValue getSender() { return sender; } - public void setSender(Address sender) { + public void setSender(UnionValue sender) { this.sender = sender; } + public void setSender(Address value) { + this.sender = MultiAddress.AccountID.from(value); + } + public SR25519Signature getSignature() { return signature; } diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/ExtrinsicReader.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/ExtrinsicReader.java index d457daf..3c5b2bf 100644 --- a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/ExtrinsicReader.java +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/ExtrinsicReader.java @@ -5,7 +5,6 @@ import io.emeraldpay.polkaj.scale.reader.UnionReader; import io.emeraldpay.polkaj.scale.reader.UnsupportedReader; import io.emeraldpay.polkaj.ss58.SS58Type; -import io.emeraldpay.polkaj.types.Address; import io.emeraldpay.polkaj.types.DotAmount; import io.emeraldpay.polkaj.types.Hash512; @@ -52,16 +51,16 @@ static class TransactionInfoReader implements ScaleReader value) throws IOExceptio static class TransactionInfoWriter implements ScaleWriter { + private static final MultiAddressWriter SENDER_WRITER = new MultiAddressWriter(); private static final EraWriter ERA_WRITER = new EraWriter(); @Override public void write(ScaleCodecWriter wrt, Extrinsic.TransactionInfo value) throws IOException { - wrt.writeUint256(value.getSender().getPubkey()); + wrt.write(SENDER_WRITER, value.getSender()); wrt.writeByte(Extrinsic.SignatureType.SR25519.getCode()); wrt.writeByteArray(value.getSignature().getValue().getBytes()); wrt.write(ERA_WRITER, value.getEra()); diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddress.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddress.java new file mode 100644 index 0000000..bd71c7b --- /dev/null +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddress.java @@ -0,0 +1,84 @@ +package io.emeraldpay.polkaj.scaletypes; + +import io.emeraldpay.polkaj.scale.UnionValue; +import io.emeraldpay.polkaj.types.Address; + +import java.util.Objects; + +/** + * Represents the MultiAddress enum defined in Substrate + * + * See: https://github.com/paritytech/substrate/blob/master/primitives/runtime/src/multiaddress.rs + */ +public abstract class MultiAddress { + + public enum Type { + ID(0), + INDEX(1), + RAW(2), + ADDRESS32(3), + ADDRESS20(4); + + private final int code; + + Type(int code) { + this.code = code; + } + + public int getCode() { + return code; + } + } + + /** + * Helper to create a UnionValue from a concrete MultiAddress instance + * + * @param type a valid MultiAddress.Type constant + * @param value concrete MultiAddress instance + * @return + */ + public static UnionValue from(int type, MultiAddress value) { + return new UnionValue<>(type, value); + } + + /** + * First MultiAddress type, used as a wrapper of a standard Address object + */ + public static class AccountID extends MultiAddress { + + private final Address address; + + public AccountID(Address address) { + this.address = address; + } + + public Address getAddress() { + return address; + } + + /** + * Transforms a standard Address object into a fully wrapped MultiAddress UnionValue + */ + public static UnionValue from(Address address) { + return MultiAddress.from(Type.ID.getCode(), new AccountID(address)); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof AccountID)) return false; + if (!((AccountID)o).canEquals(this)) return false; + AccountID that = (AccountID) o; + return Objects.equals(address, that.address); + } + + @Override + public int hashCode() { + return Objects.hash(address); + } + + public boolean canEquals(Object o) { + return (o instanceof AccountID); + } + } +} diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddressReader.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddressReader.java new file mode 100644 index 0000000..fbc9b57 --- /dev/null +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddressReader.java @@ -0,0 +1,45 @@ +package io.emeraldpay.polkaj.scaletypes; + +import io.emeraldpay.polkaj.scale.ScaleCodecReader; +import io.emeraldpay.polkaj.scale.ScaleReader; +import io.emeraldpay.polkaj.scale.UnionValue; +import io.emeraldpay.polkaj.scale.reader.UnionReader; +import io.emeraldpay.polkaj.scale.reader.UnsupportedReader; +import io.emeraldpay.polkaj.ss58.SS58Type; +import io.emeraldpay.polkaj.types.Address; + +import java.util.Arrays; + +public class MultiAddressReader implements ScaleReader> { + private final UnionReader reader; + + public MultiAddressReader(SS58Type.Network network) { + this.reader = new UnionReader<>( + Arrays.asList( + new AccountIDReader(network), + new UnsupportedReader<>("AccountIndex addresses are not supported"), + new UnsupportedReader<>("Raw addresses are not supported"), + new UnsupportedReader<>("Address32 addresses are not supported"), + new UnsupportedReader<>("Address20 addresses are not supported") + ) + ); + } + + @Override + public UnionValue read(ScaleCodecReader rdr) { + return rdr.read(reader); + } + + static class AccountIDReader implements ScaleReader { + private final SS58Type.Network network; + + public AccountIDReader(SS58Type.Network network) { + this.network = network; + } + + @Override + public MultiAddress read(ScaleCodecReader rdr) { + return new MultiAddress.AccountID(new Address(network, rdr.readUint256())); + } + } +} diff --git a/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddressWriter.java b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddressWriter.java new file mode 100644 index 0000000..dab8ebc --- /dev/null +++ b/polkaj-scale-types/src/main/java/io/emeraldpay/polkaj/scaletypes/MultiAddressWriter.java @@ -0,0 +1,30 @@ +package io.emeraldpay.polkaj.scaletypes; + +import io.emeraldpay.polkaj.scale.ScaleCodecWriter; +import io.emeraldpay.polkaj.scale.ScaleWriter; +import io.emeraldpay.polkaj.scale.UnionValue; +import io.emeraldpay.polkaj.scale.writer.UnionWriter; + +import java.io.IOException; +import java.util.Arrays; + +public class MultiAddressWriter implements ScaleWriter> { + private static final UnionWriter WRITER = new UnionWriter<>( + Arrays.asList( + new AccountIDWriter() + ) + ); + + @Override + public void write(ScaleCodecWriter wrt, UnionValue value) throws IOException { + wrt.write(WRITER, value); + } + + static class AccountIDWriter implements ScaleWriter { + @Override + public void write(ScaleCodecWriter wrt, MultiAddress value) throws IOException { + MultiAddress.AccountID accountID = (MultiAddress.AccountID) value; + wrt.writeUint256(accountID.getAddress().getPubkey()); + } + } +} diff --git a/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/AccountInfoReaderSpec.groovy b/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/AccountInfoReaderSpec.groovy index afa6373..2e7ce7e 100644 --- a/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/AccountInfoReaderSpec.groovy +++ b/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/AccountInfoReaderSpec.groovy @@ -11,13 +11,14 @@ class AccountInfoReaderSpec extends Specification { def "Read value"() { setup: - def value = Hex.decodeHex("1100000003000000f70af5f6f3c843050000000000000000000000000000000000000000000000000000c52ebca2b10000000000000000000000c52ebca2b1000000000000000000") + def value = Hex.decodeHex("110000000300000004000000f70af5f6f3c843050000000000000000000000000000000000000000000000000000c52ebca2b10000000000000000000000c52ebca2b1000000000000000000") when: def act = new ScaleCodecReader(value).read(reader) then: act != null act.nonce == 17 - act.refcount == 3 + act.consumers == 3 + act.providers == 4 with(act.data) { free == DotAmount.fromPlancks(379367743775116023) reserved == DotAmount.ZERO diff --git a/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicReaderSpec.groovy b/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicReaderSpec.groovy index d692746..43862dd 100644 --- a/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicReaderSpec.groovy +++ b/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicReaderSpec.groovy @@ -1,6 +1,8 @@ package io.emeraldpay.polkaj.scaletypes import io.emeraldpay.polkaj.scale.ScaleCodecReader +import io.emeraldpay.polkaj.scale.UnionValue +import io.emeraldpay.polkaj.scale.reader.UnionReader import io.emeraldpay.polkaj.ss58.SS58Type import io.emeraldpay.polkaj.types.Address import io.emeraldpay.polkaj.types.DotAmount @@ -12,7 +14,7 @@ class ExtrinsicReaderSpec extends Specification { def "Parse transfer"() { setup: - def existing = "390284b8fdf4f080eeaa6d3f32a445c91c7effa6ffef16d5fe81783837ab7a23602b3b01bc11655de6e7461b0951353db25f4aaf67a58db547fa3a2f20cbcd7772ba715f8ccbe9d8bddf253c7f6e6f6acb83848a7da1f27de248afca10d3291de92ede8ce5000c000400483eae8765348ef3e347e6b55995f99353223a8b28cf63829554933bcd5e801d0780cff40808" + def existing = "41028400b8fdf4f080eeaa6d3f32a445c91c7effa6ffef16d5fe81783837ab7a23602b3b01bc11655de6e7461b0951353db25f4aaf67a58db547fa3a2f20cbcd7772ba715f8ccbe9d8bddf253c7f6e6f6acb83848a7da1f27de248afca10d3291de92ede8ce5000c00040000483eae8765348ef3e347e6b55995f99353223a8b28cf63829554933bcd5e801d0780cff40808" ExtrinsicReader reader = new ExtrinsicReader<>( new BalanceTransferReader(SS58Type.Network.CANARY), SS58Type.Network.CANARY @@ -23,7 +25,7 @@ class ExtrinsicReaderSpec extends Specification { then: with(act.tx) { - sender == Address.from("GksmaqmLPbfQhsNgT2S5GcwwTkGXCpkPU8FDzxP4siKPAVu") + sender == new UnionValue(0, new MultiAddress.AccountID(Address.from("GksmaqmLPbfQhsNgT2S5GcwwTkGXCpkPU8FDzxP4siKPAVu"))) era == 229 nonce == 3 tip == DotAmount.ZERO @@ -33,7 +35,7 @@ class ExtrinsicReaderSpec extends Specification { with(act.call) { moduleIndex == 4 callIndex == 0 - destination == Address.from("ED3aw4s68wTDscCbWnCCw94qSrkA1D8HcUXC8ytaoM2X2xd") + destination == new UnionValue(0, new MultiAddress.AccountID(Address.from("ED3aw4s68wTDscCbWnCCw94qSrkA1D8HcUXC8ytaoM2X2xd"))) balance == DotAmount.fromDots(3.451) } } diff --git a/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicWriterSpec.groovy b/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicWriterSpec.groovy index 4f1ee48..7f9e743 100644 --- a/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicWriterSpec.groovy +++ b/polkaj-scale-types/src/test/groovy/io/emeraldpay/polkaj/scaletypes/ExtrinsicWriterSpec.groovy @@ -34,6 +34,6 @@ class ExtrinsicWriterSpec extends Specification { writer.close() def act = Hex.encodeHexString(buf.toByteArray()) then: - act == "390284b8fdf4f080eeaa6d3f32a445c91c7effa6ffef16d5fe81783837ab7a23602b3b01bc11655de6e7461b0951353db25f4aaf67a58db547fa3a2f20cbcd7772ba715f8ccbe9d8bddf253c7f6e6f6acb83848a7da1f27de248afca10d3291de92ede8ce5000c000400483eae8765348ef3e347e6b55995f99353223a8b28cf63829554933bcd5e801d0780cff40808" + act == "41028400b8fdf4f080eeaa6d3f32a445c91c7effa6ffef16d5fe81783837ab7a23602b3b01bc11655de6e7461b0951353db25f4aaf67a58db547fa3a2f20cbcd7772ba715f8ccbe9d8bddf253c7f6e6f6acb83848a7da1f27de248afca10d3291de92ede8ce5000c00040000483eae8765348ef3e347e6b55995f99353223a8b28cf63829554933bcd5e801d0780cff40808" } } diff --git a/polkaj-scale/src/main/java/io/emeraldpay/polkaj/scale/UnionValue.java b/polkaj-scale/src/main/java/io/emeraldpay/polkaj/scale/UnionValue.java index f349694..355319a 100644 --- a/polkaj-scale/src/main/java/io/emeraldpay/polkaj/scale/UnionValue.java +++ b/polkaj-scale/src/main/java/io/emeraldpay/polkaj/scale/UnionValue.java @@ -1,5 +1,7 @@ package io.emeraldpay.polkaj.scale; +import java.util.Objects; + public class UnionValue { private int index; @@ -23,4 +25,23 @@ public int getIndex() { public T getValue() { return value; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UnionValue)) return false; + if (!((UnionValue)o).canEquals(this)) return false; + UnionValue that = (UnionValue) o; + return Objects.equals(index, that.index) && + Objects.equals(value, that.value); + } + + public boolean canEquals(Object o) { + return (o instanceof UnionValue); + } + + @Override + public int hashCode() { + return Objects.hash(index, value); + } } diff --git a/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/AccountRequestsSpec.groovy b/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/AccountRequestsSpec.groovy index 0d38f81..9cc7078 100644 --- a/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/AccountRequestsSpec.groovy +++ b/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/AccountRequestsSpec.groovy @@ -38,12 +38,13 @@ class AccountRequestsSpec extends Specification { def "Decode balance response"() { setup: def req = AccountRequests.balanceOf(Address.from("1WG3jyNqniQMRZGQUc7QD2kVLT8hkRPGMSqAb5XYQM1UDxN")) - def result = ByteData.from("0x1100000003000000f70af5f6f3c843050000000000000000000000000000000000000000000000000000c52ebca2b10000000000000000000000c52ebca2b1000000000000000000") + def result = ByteData.from("0x110000000300000004000000f70af5f6f3c843050000000000000000000000000000000000000000000000000000c52ebca2b10000000000000000000000c52ebca2b1000000000000000000") when: def act = req.apply(result) then: act.nonce == 17 - act.refcount == 3 + act.consumers == 3 + act.providers == 4 with(act.data) { free == DotAmount.fromPlancks(379367743775116023) reserved == DotAmount.ZERO @@ -64,7 +65,7 @@ class AccountRequestsSpec extends Specification { .build() def act = transfer.encodeRequest() then: - act.toString() == "0x490284d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d016a141ade40871c076f3eb32362f0204db49e4ae37e5dc7a68329f1a6768034556201432b1635637fc1d42ae6fce996fb25ef175ee1ae4015d2b8769436d899870003d20296490005008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b008cb6611e01" + act.toString() == "0x51028400d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d016a141ade40871c076f3eb32362f0204db49e4ae37e5dc7a68329f1a6768034556201432b1635637fc1d42ae6fce996fb25ef175ee1ae4015d2b8769436d899870003d2029649000500008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b008cb6611e01" } def "Sign and encode transfer"() { @@ -83,6 +84,6 @@ class AccountRequestsSpec extends Specification { .build() def act = transfer.encodeRequest() then: - act.bytes.length == 148 + act.bytes.length == 150 } } diff --git a/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicContextAutoBuilderSpec.groovy b/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicContextAutoBuilderSpec.groovy index 7faeeae..8399e11 100644 --- a/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicContextAutoBuilderSpec.groovy +++ b/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicContextAutoBuilderSpec.groovy @@ -19,7 +19,7 @@ class ExtrinsicContextAutoBuilderSpec extends Specification { StandardCommands.getInstance().stateGetStorage(requestAccount.encodeRequest()) ) >> CompletableFuture.completedFuture( // 1,000,000.00 Dot, nonce = 1 - ByteData.from("0x010000000000000019e4759db3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") + ByteData.from("0x01000000000000000000000019e4759db3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") ) 1 * execute( StandardCommands.getInstance().getBlockHash(0) diff --git a/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicSignerSpec.groovy b/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicSignerSpec.groovy index 43c2244..68fcba9 100644 --- a/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicSignerSpec.groovy +++ b/polkaj-tx/src/test/groovy/io/emeraldpay/polkaj/tx/ExtrinsicSignerSpec.groovy @@ -39,11 +39,11 @@ class ExtrinsicSignerSpec extends Specification { when: def payload = signer.getPayload(extrinsic, call) then: - Hex.encodeHexString(payload) == "a405008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b0030ef7dba02001c0012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd5122" + Hex.encodeHexString(payload) == "a80500008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b0030ef7dba02001c0012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd5122" when: def valid = signer.isValid(extrinsic, call, - Hash512.from("0x02151a3c8c0cea52ecfd5a56ca1dd29dc5ef3984023c8374a1b52a7ed8f3ac4949b7171ae2ee4aae6a28cad94a54cfb9c2154e03bd97a44db546eb69c0f2e98f"), + Hash512.from("0x46176d89b00e11521fba7962ea18e6c4279bc32deda3140b3718f75c2cecba15915c2124cc13767bb6a8fea536788ba23fc40d54d90f8e82ffcb2c59f838808c"), TestKeys.alice ) then: @@ -65,11 +65,11 @@ class ExtrinsicSignerSpec extends Specification { when: def payload = signer.getPayload(extrinsic, call) then: - Hex.encodeHexString(payload) == "8c05008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4804001c0012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd5122" + Hex.encodeHexString(payload) == "900500008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4804001c0012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd5122" when: def valid = signer.isValid(extrinsic, call, - Hash512.from("0xa4f970f72a300871f79b9a062dfdc7f0d08c2bfb921f8caa6cbe5abf2b81ff50ca7a0c565031d983d3967bb0b42b67bd013f3ad22e97c9547965ecc81e6a3f80"), + Hash512.from("0xc6d3033548c4b2752b50da78e936d894d946de79b14be126a9dd61100c736d7a6a66c2973ebc8f65ed969a1de0f9cecdeaf8c22130486a27a875f8b35ce5828c"), TestKeys.alice ) then: @@ -91,11 +91,11 @@ class ExtrinsicSignerSpec extends Specification { when: def payload = signer.getPayload(extrinsic, call) then: - Hex.encodeHexString(payload) == "a405008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b008cb6611e010003d20296490012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd5122" + Hex.encodeHexString(payload) == "a80500008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b008cb6611e010003d20296490012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd5122" when: def valid = signer.isValid(extrinsic, call, - Hash512.from("0x6a141ade40871c076f3eb32362f0204db49e4ae37e5dc7a68329f1a6768034556201432b1635637fc1d42ae6fce996fb25ef175ee1ae4015d2b8769436d89987"), + Hash512.from("0x98cee3be271b0e127c5142d6823be37bccba77c297c0a1d131c76f9d820d1830be80711b1c86fde8b40f75cd4534666a5b8f41939b4614bfb6dfae1a96d1a88a"), TestKeys.alice ) then: @@ -119,10 +119,10 @@ class ExtrinsicSignerSpec extends Specification { when: def payload = signer.getPayload(extrinsic, call) then: - Hex.encodeHexString(payload) == "a405008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b0030ef7dba024e9c1c0012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d" + Hex.encodeHexString(payload) == "a80500008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b0030ef7dba024e9c1c0012000000030000004c0bdd177c17ca145ad9a3e76d092d4d4baa8add4fa8c78cc2fbbf8e3cbd51224baa8add4fa8c78cc2fbbf8e3cbd51224c0bdd177c17ca145ad9a3e76d092d4d" when: def valid = signer.isValid(extrinsic, call, - Hash512.from("0x3caed1957dd8be455376317867a4841639d608d235323d427eee0e2fed83bd34bfa4f87a6d54b622dfd4f63bfabc800646ae74b608af06b4a331d6a0ce993184"), + Hash512.from("0xe22aab207ae5cc08c5d4106ff4b8f0c6b6bb2dddbf3b143462d9b1aa8ad8d162a3e78a3d6d656b115fd0756cc61e89943d3eb9a971740ade59938a933f85d58c"), TestKeys.alice ) then: