@@ -81,6 +81,10 @@ export class UintNImpl<N extends BitSize> extends UintN<N> {
8181 static getMaxBitsLength ( typeInfo : TypeInfo ) : BitSize {
8282 return parseInt ( ( typeInfo . genericArgs as TypeInfo [ ] ) ! [ 0 ] . name , 10 ) as BitSize
8383 }
84+
85+ static getArc4TypeName = ( t : TypeInfo ) : string => {
86+ return `uint${ this . getMaxBitsLength ( t ) } `
87+ }
8488}
8589
8690const regExpNxM = ( maxPrecision : number ) => new RegExp ( `^\\d*\\.?\\d{0,${ maxPrecision } }$` )
@@ -144,6 +148,11 @@ export class UFixedNxMImpl<N extends BitSize, M extends number> extends UFixedNx
144148 const genericArgs = typeInfo . genericArgs as uFixedNxMGenericArgs
145149 return parseInt ( genericArgs . n . name , 10 ) as BitSize
146150 }
151+
152+ static getArc4TypeName = ( t : TypeInfo ) : string => {
153+ const genericArgs = t . genericArgs as uFixedNxMGenericArgs
154+ return `ufixed${ genericArgs . n . name } x${ genericArgs . m . name } `
155+ }
147156}
148157
149158export class ByteImpl extends Byte {
@@ -403,6 +412,11 @@ export class StaticArrayImpl<TItem extends ARC4Encoded, TLength extends number>
403412 }
404413 return size
405414 }
415+
416+ static getArc4TypeName = ( t : TypeInfo ) : string => {
417+ const genericArgs = t . genericArgs as StaticArrayGenericArgs
418+ return `${ getArc4TypeName ( genericArgs . elementType ) } [${ genericArgs . size . name } ]`
419+ }
406420}
407421
408422export class AddressImpl extends Address {
@@ -562,6 +576,11 @@ export class DynamicArrayImpl<TItem extends ARC4Encoded> extends DynamicArray<TI
562576 return result
563577 }
564578
579+ static getArc4TypeName = ( t : TypeInfo ) : string => {
580+ const genericArgs = t . genericArgs as DynamicArrayGenericArgs
581+ return `${ getArc4TypeName ( genericArgs . elementType ) } []`
582+ }
583+
565584 private encodeWithLength ( items : TItem [ ] ) {
566585 return conactUint8Arrays ( encodeLength ( items . length ) . asUint8Array ( ) , encode ( items ) )
567586 }
@@ -657,6 +676,11 @@ export class TupleImpl<TTuple extends [ARC4Encoded, ...ARC4Encoded[]]> extends T
657676 }
658677 return size
659678 }
679+
680+ static getArc4TypeName = ( t : TypeInfo ) : string => {
681+ const genericArgs = Object . values ( t . genericArgs as Record < string , TypeInfo > )
682+ return `(${ genericArgs . map ( getArc4TypeName ) . join ( ',' ) } )`
683+ }
660684}
661685
662686type StructConstraint = Record < string , ARC4Encoded >
@@ -732,6 +756,11 @@ export class StructImpl<T extends StructConstraint> extends (Struct<StructConstr
732756 result . uint8ArrayValue = asUint8Array ( bytesValue )
733757 return result
734758 }
759+
760+ static getArc4TypeName = ( t : TypeInfo ) : string => {
761+ const genericArgs = Object . values ( t . genericArgs as Record < string , TypeInfo > )
762+ return `(${ genericArgs . map ( getArc4TypeName ) . join ( ',' ) } )`
763+ }
735764}
736765
737766export class DynamicBytesImpl extends DynamicBytes {
@@ -783,6 +812,10 @@ export class DynamicBytesImpl extends DynamicBytes {
783812 result . value = dynamicArrayValue
784813 return result
785814 }
815+
816+ static getArc4TypeName = ( _t : TypeInfo ) : string => {
817+ return 'byte[]'
818+ }
786819}
787820
788821export class StaticBytesImpl extends StaticBytes {
@@ -838,6 +871,11 @@ export class StaticBytesImpl extends StaticBytes {
838871 static getMaxBytesLength ( typeInfo : TypeInfo ) : number {
839872 return StaticArrayImpl . getMaxBytesLength ( typeInfo )
840873 }
874+
875+ static getArc4TypeName = ( t : TypeInfo ) : string => {
876+ const genericArgs = t . genericArgs as StaticArrayGenericArgs
877+ return `byte[${ genericArgs . size . name } ]`
878+ }
841879}
842880
843881const decode = ( value : Uint8Array , childTypes : TypeInfo [ ] ) => {
@@ -1097,3 +1135,24 @@ export const getArc4Encoder = <T>(typeInfo: TypeInfo, encoders?: Record<string,
10971135 }
10981136 return encoder as fromBytes < T >
10991137}
1138+
1139+ export const getArc4TypeName = ( typeInfo : TypeInfo ) : string | undefined => {
1140+ const map = {
1141+ Address : 'address' ,
1142+ Bool : 'bool' ,
1143+ Byte : 'byte' ,
1144+ Str : 'string' ,
1145+ 'UintN<.*>' : UintNImpl . getArc4TypeName ,
1146+ 'UFixedNxM<.*>' : UFixedNxMImpl . getArc4TypeName ,
1147+ 'StaticArray<.*>' : StaticArrayImpl . getArc4TypeName ,
1148+ 'DynamicArray<.*>' : DynamicArrayImpl . getArc4TypeName ,
1149+ Tuple : TupleImpl . getArc4TypeName ,
1150+ Struct : StructImpl . getArc4TypeName ,
1151+ DynamicBytes : DynamicBytesImpl . getArc4TypeName ,
1152+ 'StaticBytes<.*>' : StaticBytesImpl . getArc4TypeName ,
1153+ }
1154+ const name = Object . entries ( map ) . find ( ( [ k , _ ] ) => new RegExp ( `^${ k } $` , 'i' ) . test ( typeInfo . name ) ) ?. [ 1 ]
1155+ if ( typeof name === 'string' ) return name
1156+ else if ( typeof name === 'function' ) return name ( typeInfo )
1157+ return undefined
1158+ }
0 commit comments