https://github.com/Polymarket/poly-py-e ... or.pyКласс
EIP712Domain, наследуемый от EIP712Struct, который наследуется от EIP712Type
Класс EIP712Type имеет метод mustinherit
Код: Выделить всё
def _encode_value(self, value) -> bytes:
"""Must be implemented by subclasses, handles value encoding on a case-by-case basis.
Don't call this directly - use ``.encode_value(value)`` instead.
"""
pass
Чего мне не хватает?
Мое текущее решение после проконсультироваться с ChatGPT и использовать немного здравого смысла - вот это
Код: Выделить всё
Public Class EIP712Domain
Inherits EIP712Struct
Public Shared DefaultDomain As EIP712Domain = Nothing
' Define properties with nullable types since fields are optional
Public Property Name As String
Public Property Version As String
Public Property ChainId As Nullable(Of UInteger)
Public Property VerifyingContract As String
Public Property Salt As Byte() ' Assuming Salt is a 32-byte array
' Constructor that initializes fields based on the provided parameters
Public Sub New(Optional name As String = Nothing,
Optional version As String = Nothing,
Optional chainId As Nullable(Of UInteger) = Nothing,
Optional verifyingContract As String = Nothing,
Optional salt As Byte() = Nothing)
' Validate that at least one argument is provided
If name Is Nothing AndAlso version Is Nothing AndAlso
chainId Is Nothing AndAlso verifyingContract Is Nothing AndAlso
salt Is Nothing Then
Throw New ArgumentException("At least one argument must be given.")
End If
' Conditionally assign values based on provided arguments
Me.Name = name
Me.Version = version
Me.ChainId = chainId
Me.VerifyingContract = verifyingContract
Me.Salt = salt
End Sub
Protected Overrides Function _EncodeValue(value As Object) As Byte()
Dim encodedFields As New List(Of Byte())
' Encode each field based on its type if it's not Nothing.
If Name IsNot Nothing Then
encodedFields.Add((New StringType()).EncodeValue(Name))
End If
If Version IsNot Nothing Then
encodedFields.Add((New StringType()).EncodeValue(Version))
End If
If ChainId IsNot Nothing Then
encodedFields.Add((New UintType(256)).EncodeValue(ChainId))
End If
If VerifyingContract IsNot Nothing Then
encodedFields.Add((New AddressType()).EncodeValue(VerifyingContract))
End If
If Salt IsNot Nothing Then
encodedFields.Add((New BytesType(32)).EncodeValue(Salt))
End If
' Concatenate the encoded fields into a single byte array
Dim concatenated As Byte() = encodedFields.SelectMany(Function(b) b).ToArray()
' Hash the concatenated fields
Return Keccak(concatenated)
End Function
End Class
Дело в том, что _encode_value для версии Python нигде не реализовано, и я это проверил. Итак,chatgpt дал мне наиболее вероятную правильную реализацию.
Еще одна вещь, которая может сработать, — это просто сделать
Код: Выделить всё
Protected Overrides Function _EncodeValue(value As Object) As Byte()
Throw New NotImplementedException()
'This shouldn't be called
End Function
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-encode-v
Мобильная версия