web3swift web3swift is an iOS toolbelt for interaction with the Ethereum network. Social media Join our discord or Telegram if you need support or want to contribute to web3swift development! Core features Installation Swift Package CocoaPods Example usage Send Ether Contract read method Write Transaction and call smart contract method Sending network request to a node Build from source SPM Requirements…
:zap: Swift implementation of web3.js functionality
:thought_balloon: Interaction with remote node via JSON RPC
🔐 Local keystore management (geth compatible)
🤖 Smart-contract ABI parsing
🔓ABI decoding (V2 is supported with return of structures from public functions. Part of 0.4.22 Solidity compiler)
🕸Ethereum Name Service (ENS) support - a secure & decentralised way to address resources both on and off the blockchain using simple, human-readable names
⚒ Parsing TxPool content into native values (ethereum addresses and transactions) - easy to get pending transactions
🖇 Event loops functionality
🕵️♂️ Possibility to add or remove “middleware” that intercepts, modifies and even cancel transaction workflow on stages “before assembly”, “after assembly” and “before submission”
✅Literally following the standards (BIP, EIP, etc):
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ sudo gem install cocoapods
To integrate web3swift into your Xcode project using CocoaPods, specify it in your Podfile:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '13.0'
target '<Your Target Name>' do
use_frameworks!
pod 'web3swift'
end
Then, run the following command:
$ pod install
WARNING: CocoaPods is a powerful tool for managing dependencies in iOS development, but it also has some limitations that preventing us of providing first class support there. We highly recommend using SPM first as using CocoaPods will delay new updates and bug fixes being delivered to you.
Send Ether
let transaction: CodableTransaction = .emptyTransaction
transaction.from = from ?? transaction.sender // `sender` one is if you have private key of your wallet address, so public key e.g. your wallet address could be interpreted
transaction.value = value
transaction.gasLimitPolicy = .manual(78423)
transaction.gasPricePolicy = .manual(20000000000)
web3.eth.send(transaction)
Contract read method
let contract = web3.contract(Web3.Utils.erc20ABI, at: receipt.contractAddress!)!
let readOp = contract.createReadOperation("name")!
readOp.transaction.from = EthereumAddress("0xe22b8979739D724343bd002F9f432F5990879901")
let response = try await readTX.callContractMethod()
Write Transaction and call smart contract method
let abiString = "[]" // some ABI string
let bytecode = Data.fromHex("") // some ABI bite sequence
let contract = web3.contract(abiString, at: nil, abiVersion: 2)!
let parameters: [Any] = [...]
let deployOp = contract.prepareDeploy(bytecode: bytecode, constructor: contract.contract.constructor, parameters: parameters)!
deployOp.transaction.from = "" // your address
deployOp.transaction.gasLimitPolicy = .manual(3000000)
let result = try await deployTx.writeToChain(password: "web3swift")
Sending network request to a node
func feeHistory(blockCount: UInt, block: BlockNumber, percentiles:[Double]) async throws -> Web3.Oracle.FeeHistory {
let requestCall: APIRequest = .feeHistory(blockCount, block, percentiles)
let response: APIResponse<Web3.Oracle.FeeHistory> = try await APIRequest.sendRequest(with: web3.provider, for: requestCall) /// explicitly declaring `Result` type is **required**.
return response.result
}
Build from source
SPM
git clone https://github.com/web3swift-team/web3swift.git
cd web3swift
swift build
Requirements
iOS 13.0 / macOS 10.15
Xcode 12.5
Swift 5.5
Documentation
Documentation is under construction👷🏻👷🏼♀️. We’re trying our best to comment all public API as detailed as we can, but the end it still far to come. But in one of the nearest minor updates we’ll bring DocC support of already done amount of docs. And your PR in such are more than welcome.
To do local development and run the local tests, we recommend to use ganache which is also used by CI when running github actions.
// To install
$ npm install ganache --global
// To run
$ ganache
This will create a local blockchain and also some test accounts that are used throughout our tests.
Make sure that ganache is running on its default port 8546. To change the port in test cases locate LocalTestCase.swift and modify the static url variable.
Before you commit
We are using pre-commit to run validations locally before a commit is created. Please, install pre-commit and run pre-commit install from project’s root directory. After that before every commit git hook will run and execute codespell, swiftlint and other checks.
Contribute
Want to improve? It’s awesome:
Then good news for you: We are ready to pay for your contribution via @gitcoin bot!
Please, provide detailed description to it to help us proceed it faster.
@skywinder are charged with open-sourсe and do not require money for using web3swift library.
We want to continue to do everything we can to move the needle forward.
If you believe you have identified a security vulnerability with web3swift, you should report it as soon as possible via email to [email protected]. Please do not post it to a public issue tracker.
License
web3swift is available under the Apache License 2.0 license. See the LICENSE for details.
评论