@@ -51,6 +51,8 @@ import {
5151 ERC1155SafeTransferTypes ,
5252 ERC721SafeTransferTypeMethodId ,
5353 ERC721SafeTransferTypes ,
54+ ERC721TransferFromMethodId ,
55+ ERC721TransferFromTypes ,
5456 flushCoinsMethodId ,
5557 flushCoinsTypes ,
5658 flushForwarderTokensMethodId ,
@@ -509,26 +511,46 @@ export function decodeERC721TransferData(data: string): ERC721TransferData {
509511 ) ;
510512
511513 const internalDataHex = bufferToHex ( internalData as Buffer ) ;
512- if ( ! internalDataHex . startsWith ( ERC721SafeTransferTypeMethodId ) ) {
513- throw new BuildTransactionError ( `Invalid transfer bytecode: ${ data } ` ) ;
514+
515+ if ( internalDataHex . startsWith ( ERC721SafeTransferTypeMethodId ) ) {
516+ const [ from , receiver , tokenId , userSentData ] = getRawDecoded (
517+ ERC721SafeTransferTypes ,
518+ getBufferedByteCode ( ERC721SafeTransferTypeMethodId , internalDataHex )
519+ ) ;
520+
521+ return {
522+ to : addHexPrefix ( receiver as string ) ,
523+ from : addHexPrefix ( from as string ) ,
524+ expireTime : bufferToInt ( expireTime as Buffer ) ,
525+ amount : new BigNumber ( bufferToHex ( amount as Buffer ) ) . toFixed ( ) ,
526+ tokenId : new BigNumber ( bufferToHex ( tokenId as Buffer ) ) . toFixed ( ) ,
527+ sequenceId : bufferToInt ( sequenceId as Buffer ) ,
528+ signature : bufferToHex ( signature as Buffer ) ,
529+ tokenContractAddress : addHexPrefix ( to as string ) ,
530+ userData : bufferToHex ( userSentData as Buffer ) ,
531+ } ;
514532 }
515533
516- const [ from , receiver , tokenId , userSentData ] = getRawDecoded (
517- ERC721SafeTransferTypes ,
518- getBufferedByteCode ( ERC721SafeTransferTypeMethodId , internalDataHex )
519- ) ;
534+ if ( internalDataHex . startsWith ( ERC721TransferFromMethodId ) ) {
535+ const [ from , receiver , tokenId ] = getRawDecoded (
536+ ERC721TransferFromTypes ,
537+ getBufferedByteCode ( ERC721TransferFromMethodId , internalDataHex )
538+ ) ;
520539
521- return {
522- to : addHexPrefix ( receiver as string ) ,
523- from : addHexPrefix ( from as string ) ,
524- expireTime : bufferToInt ( expireTime as Buffer ) ,
525- amount : new BigNumber ( bufferToHex ( amount as Buffer ) ) . toFixed ( ) ,
526- tokenId : new BigNumber ( bufferToHex ( tokenId as Buffer ) ) . toFixed ( ) ,
527- sequenceId : bufferToInt ( sequenceId as Buffer ) ,
528- signature : bufferToHex ( signature as Buffer ) ,
529- tokenContractAddress : addHexPrefix ( to as string ) ,
530- userData : bufferToHex ( userSentData as Buffer ) ,
531- } ;
540+ return {
541+ to : addHexPrefix ( receiver as string ) ,
542+ from : addHexPrefix ( from as string ) ,
543+ expireTime : bufferToInt ( expireTime as Buffer ) ,
544+ amount : new BigNumber ( bufferToHex ( amount as Buffer ) ) . toFixed ( ) ,
545+ tokenId : new BigNumber ( bufferToHex ( tokenId as Buffer ) ) . toFixed ( ) ,
546+ sequenceId : bufferToInt ( sequenceId as Buffer ) ,
547+ signature : bufferToHex ( signature as Buffer ) ,
548+ tokenContractAddress : addHexPrefix ( to as string ) ,
549+ userData : '' ,
550+ } ;
551+ }
552+
553+ throw new BuildTransactionError ( `Invalid transfer bytecode: ${ data } ` ) ;
532554}
533555
534556export function decodeERC1155TransferData ( data : string ) : ERC1155TransferData {
0 commit comments