diff --git a/AlphaWallet/TokenScriptClient/Models/FunctionOrigin.swift b/AlphaWallet/TokenScriptClient/Models/FunctionOrigin.swift index fcdc3f9860..d5ca46ca1c 100644 --- a/AlphaWallet/TokenScriptClient/Models/FunctionOrigin.swift +++ b/AlphaWallet/TokenScriptClient/Models/FunctionOrigin.swift @@ -147,8 +147,11 @@ struct FunctionOrigin { let resultSubscribable = Subscribable(nil) subscribable.subscribe { value in guard let value = value else { return } - guard let bitmask = self.bitmask else { return } - resultSubscribable.value = self.castReturnValue(value: value, bitmask: bitmask) + if let bitmask = self.bitmask { + resultSubscribable.value = self.castReturnValue(value: value, bitmask: bitmask) + } else { + resultSubscribable.value = value + } } return .subscribable(resultSubscribable) } diff --git a/AlphaWallet/TokenScriptClient/Models/Origin.swift b/AlphaWallet/TokenScriptClient/Models/Origin.swift index 6720962a26..d6e71175db 100644 --- a/AlphaWallet/TokenScriptClient/Models/Origin.swift +++ b/AlphaWallet/TokenScriptClient/Models/Origin.swift @@ -80,22 +80,21 @@ enum Origin { } init?(forTokenIdElement tokenIdElement: XMLElement, xmlContext: XmlContext) { - guard let bitmask = XMLHandler.getBitMask(fromTokenIdElement: tokenIdElement) else { return nil } + let bitmask = XMLHandler.getBitMask(fromTokenIdElement: tokenIdElement) ?? TokenScript.defaultBitmask guard let asType = tokenIdElement["as"].flatMap({ OriginAsType(rawValue: $0) }) else { return nil } - let bitShift = Origin.bitShiftCount(forBitMask: bitmask) self = .tokenId(.init(originElement: tokenIdElement, xmlContext: xmlContext, bitmask: bitmask, bitShift: bitShift, asType: asType)) } init?(forEthereumFunctionElement ethereumFunctionElement: XMLElement, attributeId: AttributeId, originContract: AlphaWallet.Address, xmlContext: XmlContext) { - guard let bitmask = XMLHandler.getBitMask(fromTokenIdElement: ethereumFunctionElement) else { return nil } + let bitmask = XMLHandler.getBitMask(fromTokenIdElement: ethereumFunctionElement) ?? TokenScript.defaultBitmask let bitShift = Origin.bitShiftCount(forBitMask: bitmask) guard let result = FunctionOrigin(forEthereumFunctionCallElement: ethereumFunctionElement, attributeId: attributeId, originContract: originContract, xmlContext: xmlContext, bitmask: bitmask, bitShift: bitShift) else { return nil } self = .function(result) } init?(forUserEntryElement userEntryElement: XMLElement, attributeId: AttributeId, xmlContext: XmlContext) { - guard let bitmask = XMLHandler.getBitMask(fromTokenIdElement: userEntryElement) else { return nil } + let bitmask = XMLHandler.getBitMask(fromTokenIdElement: userEntryElement) ?? TokenScript.defaultBitmask let bitShift = Origin.bitShiftCount(forBitMask: bitmask) guard let asType = userEntryElement["as"].flatMap({ OriginAsType(rawValue: $0) }) else { return nil } self = .userEntry(.init(originElement: userEntryElement, xmlContext: xmlContext, attributeId: attributeId, asType: asType, bitmask: bitmask, bitShift: bitShift)) diff --git a/AlphaWallet/TokenScriptClient/Models/TokenScript.swift b/AlphaWallet/TokenScriptClient/Models/TokenScript.swift index 914a709586..6495c078f6 100644 --- a/AlphaWallet/TokenScriptClient/Models/TokenScript.swift +++ b/AlphaWallet/TokenScriptClient/Models/TokenScript.swift @@ -18,4 +18,5 @@ extension TokenScript { static let supportedTokenScriptNamespaceVersion = "2019/10" static let supportedTokenScriptNamespace = "\(tokenScriptNamespacePrefix)\(supportedTokenScriptNamespaceVersion)/tokenscript" static let indicesFileName = "indices" + static let defaultBitmask: BigUInt = BigUInt("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", radix: 16)! }