@@ -78,10 +78,12 @@ private function encodeStatic(string $type, mixed $val): string
7878 }
7979 if ($ type === 'address ' ) {
8080 $ clean = strtolower (preg_replace ('/^0x/ ' , '' , (string ) $ val ));
81+
8182 return str_pad ($ clean , 64 , '0 ' , STR_PAD_LEFT );
8283 }
8384 if ($ type === 'bytes32 ' ) {
8485 $ clean = strtolower (preg_replace ('/^0x/ ' , '' , (string ) $ val ));
86+
8587 return str_pad (substr ($ clean , 0 , 64 ), 64 , '0 ' , STR_PAD_RIGHT );
8688 }
8789 if ($ type === 'bool ' ) {
@@ -100,6 +102,7 @@ private function encodeDynamic(string $type, mixed $val): string
100102 $ length = strlen ($ bin ); // bytes
101103 $ lenSlot = str_pad (dechex ($ length ), 64 , '0 ' , STR_PAD_LEFT );
102104 $ dataPadded = $ this ->padHexRight ($ hex );
105+
103106 return $ lenSlot .$ dataPadded ;
104107 }
105108 if ($ type === 'bytes ' ) {
@@ -108,6 +111,7 @@ private function encodeDynamic(string $type, mixed $val): string
108111 $ length = strlen ($ bin );
109112 $ lenSlot = str_pad (dechex ($ length ), 64 , '0 ' , STR_PAD_LEFT );
110113 $ dataPadded = $ this ->padHexRight ($ clean );
114+
111115 return $ lenSlot .$ dataPadded ;
112116 }
113117 throw new \RuntimeException ('Unsupported dynamic ABI type ' .$ type );
@@ -117,12 +121,14 @@ private function padHexRight(string $hex): string
117121 {
118122 $ bytesLen = (int ) ceil (strlen ($ hex ) / 2 );
119123 $ padBytes = (32 - ($ bytesLen % 32 )) % 32 ;
124+
120125 return $ hex .str_repeat ('00 ' , $ padBytes );
121126 }
122127
123128 public function callStatic (array |string $ abi , string $ fn , array $ args , callable $ ethCall ): mixed
124129 {
125130 $ data = $ this ->encodeFunction ($ abi , $ fn , $ args );
131+
126132 return $ ethCall ($ data );
127133 }
128134}
0 commit comments