Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Components
import Localization
import Primitives
import PrimitivesComponents
import Style

struct ConfirmRecipientViewModel {
private let model: TransferDataViewModel
Expand All @@ -29,7 +30,7 @@ extension ConfirmRecipientViewModel: ItemModelProvidable {
name: addressName?.name ?? model.recipient.name,
chain: model.chain,
address: model.recipient.address,
assetImage: .none
assetImage: recipientImage ?? addressNameImage
),
mode: .nameOrAddress,
addressLink: addressLink
Expand All @@ -41,6 +42,27 @@ extension ConfirmRecipientViewModel: ItemModelProvidable {
// MARK: - Private

extension ConfirmRecipientViewModel {
private var recipientImage: AssetImage? {
switch model.recipient.type {
case .domain(let provider):
switch provider {
case .ens, .basenames: AssetImage.image(Images.NameResolve.ens)
case .ud, .sns, .spaceid, .lens, .ton, .tree, .eths, .did, .suins, .aptos, .injective, .icns, .hyperliquid, .allDomains: nil
}
case .none: nil
}
}

private var addressNameImage: AssetImage? {
switch addressName?.type {
case .contact:
guard let name = addressName?.name else { return nil }
return AssetImage(type: String(name.prefix(2)))
case .address, .contract, .validator, .none:
return nil
}
}

private var recipientTitle: String {
switch model.type {
case .swap: Localized.Common.provider
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ extension RecipientSceneViewModel {
private func makeRecipientData(name: NameRecord?, address: String, memo: String?, amount: String?) -> RecipientData {
let recipient: Recipient = {
if let result = name {
return Recipient(name: result.name, address: result.address, memo: memo)
return Recipient(name: result.name, address: result.address, memo: memo, type: .domain(result.provider))
}
return Recipient(name: .none, address: address, memo: memo)
}()
Expand Down
2 changes: 1 addition & 1 deletion Packages/ChainServices/StakeService/StakeService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ extension StakeService {
}
try store.updateValidators(updateValidators)

let addressNames = updateValidators.map { AddressName(chain: $0.chain, address: $0.id, name: $0.name)}
let addressNames = updateValidators.map { AddressName(chain: $0.chain, address: $0.id, name: $0.name, type: .validator) }
try addressStore.addAddressNames(addressNames)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public struct ContactService: Sendable {
extension ContactService {
private func syncAddressNames(contact: Contact, addresses: [ContactAddress]) throws {
let addressNames = addresses.map {
AddressName(chain: $0.chain, address: $0.address, name: contact.name)
AddressName(chain: $0.chain, address: $0.address, name: contact.name, type: .contact)
}
try addressStore.addAddressNames(addressNames)
}
Expand Down
4 changes: 3 additions & 1 deletion Packages/Primitives/Sources/AddressName.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ public struct AddressName: Codable, Equatable, Hashable, Sendable {
public let chain: Chain
public let address: String
public let name: String
public let type: AddressType?

public init(chain: Chain, address: String, name: String) {
public init(chain: Chain, address: String, name: String, type: AddressType?) {
self.chain = chain
self.address = address
self.name = name
self.type = type
}
}

This file was deleted.

28 changes: 14 additions & 14 deletions Packages/Primitives/Sources/Name.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,6 @@

import Foundation

public struct NameRecord: Codable, Hashable, Sendable {
public let name: String
public let chain: Chain
public let address: String
public let provider: String

public init(name: String, chain: Chain, address: String, provider: String) {
self.name = name
self.chain = chain
self.address = address
self.provider = provider
}
}

public enum NameProvider: String, Codable, Sendable {
case ud
case ens
Expand All @@ -36,3 +22,17 @@ public enum NameProvider: String, Codable, Sendable {
case hyperliquid
case allDomains = "alldomains"
}

public struct NameRecord: Codable, Hashable, Sendable {
public let name: String
public let chain: Chain
public let address: String
public let provider: NameProvider

public init(name: String, chain: Chain, address: String, provider: NameProvider) {
self.name = name
self.chain = chain
self.address = address
self.provider = provider
}
}
8 changes: 7 additions & 1 deletion Packages/Primitives/Sources/Recipient.swift
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
import Foundation

public enum RecipientType: Codable, Equatable, Hashable, Sendable {
case domain(NameProvider)
}

public struct Recipient: Codable, Equatable, Hashable, Sendable {
public let name: String?
public let address: String
public let memo: String?
public let type: RecipientType?

public init(name: String?, address: String, memo: String?) {
public init(name: String?, address: String, memo: String?, type: RecipientType? = nil) {
self.name = name
self.address = address
self.memo = memo
self.type = type
}
}

Expand Down
1 change: 1 addition & 0 deletions Packages/Primitives/Sources/Scan.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public enum AddressType: String, Codable, Equatable, Sendable {
case address
case contract
case validator
case contact
}

public struct ScanAddress: Codable, Equatable, Sendable {
Expand Down
2 changes: 1 addition & 1 deletion Packages/Primitives/Sources/Transaction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import Foundation

public struct Transaction: Codable, Equatable, Sendable {
public struct Transaction: Codable, Equatable, Hashable, Sendable {
public let id: TransactionId
public let assetId: AssetId
public let from: String
Expand Down
2 changes: 1 addition & 1 deletion Packages/Primitives/Sources/TransactionExtended.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import Foundation

public struct TransactionExtended: Codable, Sendable {
public struct TransactionExtended: Codable, Equatable, Hashable, Sendable {
public let transaction: Transaction
public let asset: Asset
public let feeAsset: Asset
Expand Down
2 changes: 1 addition & 1 deletion Packages/Primitives/Sources/TransactionUtxo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import Foundation

public struct TransactionUtxoInput: Codable, Equatable, Sendable {
public struct TransactionUtxoInput: Codable, Equatable, Hashable, Sendable {
public let address: String
public let value: String

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ public extension AddressName {
static func mock(
chain: Chain = .arbitrum,
address: String = "0x2Df1c51E09aECF9cacB7bc98cB1742757f163dF7",
name: String = "Hyperliquid"
name: String = "Hyperliquid",
type: AddressType? = nil
) -> AddressName {
AddressName(
chain: chain,
address: address,
name: name
name: name,
type: type
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public extension NameRecord {
name: name,
chain: chain,
address: address,
provider: provider.rawValue
provider: provider
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ private struct ExplorerMock: ExplorerLinkFetchable {
feePrice: nil,
assets: [],
prices: [],
fromAddress: AddressName(chain: .smartChain, address: "0x92abCE21234D71EC443E679f3a1feAFD3Fc830fB", name: "test1"),
toAddress: AddressName(chain: .smartChain, address: "0x8d7460E51bCf4eD26877cb77E56f3ce7E9f5EB8F", name: "test2")
fromAddress: AddressName(chain: .smartChain, address: "0x92abCE21234D71EC443E679f3a1feAFD3Fc830fB", name: "test1", type: nil),
toAddress: AddressName(chain: .smartChain, address: "0x8d7460E51bCf4eD26877cb77E56f3ce7E9f5EB8F", name: "test2", type: nil)
)

let transactionVMMock = TransactionViewModel(
Expand Down
6 changes: 6 additions & 0 deletions Packages/Store/Sources/Migrations.swift
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,12 @@ struct Migrations {
try? ContactAddressRecord.create(db: db)
}

migrator.registerMigration("Add type to \(AddressRecord.databaseTableName)") { db in
try? db.alter(table: AddressRecord.databaseTableName) {
$0.add(column: AddressRecord.Columns.type.name, .text)
}
}

try migrator.migrate(dbQueue)
}
}
16 changes: 11 additions & 5 deletions Packages/Store/Sources/Models/AddressRecord.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,29 @@ import Primitives

struct AddressRecord: Codable, FetchableRecord, PersistableRecord, Sendable {
static let databaseTableName = "addresses"

enum Columns {
static let chain = Column("chain")
static let address = Column("address")
static let name = Column("name")
static let type = Column("type")
}

let chain: Chain
let address: String
let name: String

let type: AddressType?

init(
chain: Chain,
address: String,
name: String
name: String,
type: AddressType?
) {
self.chain = chain
self.address = address
self.name = name
self.type = type
}
}

Expand All @@ -38,6 +42,7 @@ extension AddressRecord: CreateTable {
.notNull()
$0.column(Columns.name.name, .text)
.notNull()
$0.column(Columns.type.name, .text)
$0.primaryKey([Columns.chain.name, Columns.address.name])
}
}
Expand All @@ -48,7 +53,8 @@ extension AddressRecord {
AddressName(
chain: chain,
address: address,
name: name
name: name,
type: type
)
}
}
3 changes: 2 additions & 1 deletion Packages/Store/Sources/Stores/AddressStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ public struct AddressStore: Sendable {
try AddressRecord(
chain: addressName.chain,
address: addressName.address,
name: addressName.name
name: addressName.name,
type: addressName.type
).save(db, onConflict: .replace)
}
}
Expand Down
4 changes: 2 additions & 2 deletions Packages/Store/TestKit/AddressStore+TestKit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public extension AddressStore {
static func mockAddresses(db: DB = .mock()) -> Self {
let store = AddressStore(db: db)
try? store.addAddressNames([
AddressName(chain: .ethereum, address: "0x1234567890123456789012345678901234567890", name: "Ethereum"),
AddressName(chain: .bitcoin, address: "bc1qml9s2f9k8wc0882x63lyplzp97srzg2c39fyaw", name: "Bitcoin")
AddressName(chain: .ethereum, address: "0x1234567890123456789012345678901234567890", name: "Ethereum", type: nil),
AddressName(chain: .bitcoin, address: "bc1qml9s2f9k8wc0882x63lyplzp97srzg2c39fyaw", name: "Bitcoin", type: nil)
])
return store
}
Expand Down
1 change: 1 addition & 0 deletions Packages/Style/Sources/Images.swift
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ public enum Images {
public enum NameResolve {
public static let success = Image(.nameResolveSuccess)
public static let error = Image(.nameResolveError)
public static let ens = Image(.ens)
}

public enum Info {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "ens.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion core
Submodule core updated 105 files