Skip to content

LyubomyrBurday/near_basic

Repository files navigation

Про проект

Read this in other languages: English

Даний проект розроблений для демонстрації основних функціх та базового функціоналу nearclientios. Початок роботи з бібліотекою починається з створення config об'єкту та ініціалізації об'єктів типу Near та WalletAcount. Користувач використовує наявний аккаунт або створює новий за допомогою WebView, який реалізований в nearclientios та отримує вище описані об'єкти з PublicKey. Володіючи PublicKey ми можемо використовувати та підписувати методи без необхідності додаткового підтвердження від користувача.

private var walletAccount: WalletAccount?
private var near: Near?
  
private func setupWallet() async -> WalletAccount {
      let keyStore = SecureEnclaveKeyStore(keychain: .init(service: "example.keystore"))
      keyStore.context = LAContext()
      let config = NearConfig(
        networkId: API.NODE_URL,
        nodeUrl: URL(string: API.NETWORK_ID)!,
        masterAccount: nil,
        keyPath: nil,
        helperUrl: nil,
        initialBalance: nil,
        providerType: .jsonRPC(URL(string: API.JSON_RPC)!),
        signerType: .inMemory(keyStore),
        keyStore: keyStore,
        contractName: nil,
        walletUrl: API.WALLET_URL
      )
      near = Near(config: config)
      return try! WalletAccount(near: near!, authService: DefaultAuthService.shared)
    }

Приклад створення смарт контракту для подальшого використання

private func contractSetup() async throws {
        let contractId = generateUniqueString(prefix: "test_contract")
        let myKey = try await near!.connection.signer.getPublicKey(accountId: account.accountId, networkId: account.connection.networkId)

        try await account.createAndDeployContract(contractId: contractId, publicKey: myKey, data: Wasm().data.bytes, amount: AMOUNT_FOR_TESTING)
        let options = ContractOptions(viewMethods: [.hello, .getValue, .getAllKeys, .returnHiWithLogs], changeMethods: [.setValue, .generateLogs, .triggerAssert, .testSetRemove], sender: nil)
        contract = Contract(account: account, contractId: contractId, options: options)
    }

Приклад використання методів account.viewFunction() та account.functionCall() для запису в смарт контракт

 private func makeFunctionCallViaAccount() async throws {
        try await account.viewFunction(contractId: contractId, methodName: .hello, args: ["name": "trex"])
        try await account.functionCall(contractId: contractId, methodName: .setValue, args: ["value": generateUniqueString(prefix: "iPhone 14")], amount: 1)
        let viewResult: String = try await account.viewFunction(contractId: contractId, methodName: .getValue, args: [:])
    }

Приклад використання методу надсилання коштів іншому користувачу

try await contract.change(methodName: .setValue, args: ["question": "test.testnet" ,"value": answerTextField.text!], amount: convertToYoctoNears(nears: 1))

Інші базові методи можна переглянути у контроллерів AccountVC.swift.

Вимоги

nearclientios використовує iOS 13+ та Swift async/await

Самостійне встановлення

CocoaPods

nearclientios можливо встановити за допомогою CocoaPods. Щоб встановити необхідно додати наступний рядок в Podfile.

pod 'nearclientios'

Swift Package Manager

nearclientios можливо встановити за допомогою Swift Package Manager додавши залежність в Package.swift.

dependencies: [
  .package(url: "https://github.com/near/near-api-swift", .upToNextMajor(from: "1.0.29"))
]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published