Skip to content

Commit 20882df

Browse files
committed
encodePacked DynamicBytes
Signed-off-by: hamburger <[email protected]>
1 parent b552fee commit 20882df

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

abi/src/main/java/org/web3j/abi/TypeEncoder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public static String encodePacked(Type parameter) {
103103
if (parameter instanceof Utf8String) {
104104
return removePadding(encode(parameter), parameter);
105105
} else if (parameter instanceof DynamicBytes) {
106-
return encode(parameter).substring(64);
106+
return Numeric.toHexStringNoPrefix(((DynamicBytes) parameter).getValue());
107107
} else if (parameter instanceof DynamicArray) {
108108
return arrayEncodePacked((DynamicArray) parameter);
109109
} else if (parameter instanceof StaticArray) {

abi/src/test/java/org/web3j/abi/DefaultFunctionEncoderTest.java

+14
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.web3j.abi.datatypes.generated.Bytes10;
3434
import org.web3j.abi.datatypes.generated.Uint256;
3535
import org.web3j.abi.datatypes.generated.Uint32;
36+
import org.web3j.utils.Numeric;
3637

3738
import static org.junit.jupiter.api.Assertions.assertEquals;
3839

@@ -151,6 +152,19 @@ public void testEncodeConstructorPacked_multipleParameters() {
151152
new Address("0x663e27AdC18d862dA9A82f060310621D379e469a"),
152153
new Uint256(BigInteger.TEN),
153154
new Bytes10("1234567890".getBytes()))));
155+
assertEquals(
156+
"0000004501000102030405",
157+
FunctionEncoder.encodeConstructorPacked(
158+
Arrays.asList(
159+
new Uint32(BigInteger.valueOf(69)),
160+
new Bool(true),
161+
new DynamicBytes((new byte[]{0, 1, 2, 3, 4, 5})))));
162+
assertEquals(
163+
"12000102030405",
164+
FunctionEncoder.encodeConstructorPacked(
165+
Arrays.asList(
166+
new DynamicBytes(Numeric.hexStringToByteArray("0x12")),
167+
new DynamicBytes((new byte[]{0, 1, 2, 3, 4, 5})))));
154168
}
155169

156170
@Test

abi/src/test/java/org/web3j/abi/TypeEncoderPackedTest.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -905,17 +905,22 @@ public void testStaticArrayEncodePacked() {
905905
public void testDynamicBytesEncodePacked() {
906906
DynamicBytes dynamicBytes = new DynamicBytes(new byte[] {0, 1, 2, 3, 4, 5});
907907
assertEquals(
908-
"0001020304050000000000000000000000000000000000000000000000000000",
908+
"000102030405",
909909
TypeEncoder.encodePacked(dynamicBytes));
910910

911-
DynamicBytes empty = new DynamicBytes(new byte[] {0});
911+
DynamicBytes zero = new DynamicBytes(new byte[] {0});
912912
assertEquals(
913-
"0000000000000000000000000000000000000000000000000000000000000000",
913+
"00",
914+
TypeEncoder.encodePacked(zero));
915+
916+
DynamicBytes empty = new DynamicBytes(new byte[] {});
917+
assertEquals(
918+
"",
914919
TypeEncoder.encodePacked(empty));
915920

916921
DynamicBytes dave = new DynamicBytes("dave".getBytes());
917922
assertEquals(
918-
"6461766500000000000000000000000000000000000000000000000000000000",
923+
"64617665",
919924
TypeEncoder.encodePacked(dave));
920925

921926
DynamicBytes loremIpsum =
@@ -942,7 +947,7 @@ public void testDynamicBytesEncodePacked() {
942947
+ "756c6c612070617269617475722e204578636570746575722073696e74206f63"
943948
+ "63616563617420637570696461746174206e6f6e2070726f6964656e742c2073"
944949
+ "756e7420696e2063756c706120717569206f666669636961206465736572756e"
945-
+ "74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e000000"),
950+
+ "74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e"),
946951
TypeEncoder.encodePacked(loremIpsum));
947952
}
948953

0 commit comments

Comments
 (0)