web3swift
web3swift 是与以太坊网络交互的 iOS 工具包。
社交媒体
如果您需要支持或想为 web3swift 开发做出贡献,请加入我们的Discord 或 Telegram!
核心功能
-
⚡ Web3.js 功能的 Swift 实现 -
💭 通过 JSON RPC 与远程节点交互 -
🔐 本地 密钥存储管理(与geth
兼容) -
🤖 智能合约 ABI 解析 -
🔓 ABI 解码(支持回传结构体,部分来自 0.4.22 Solidity 编译器) -
🕸 以太坊名称服务(ENS)支持 - 一种安全且去中心化地使用简单、易读的名字来寻址区块链上和链下资源的方式 -
🔄 智能合约交互(读取/写入) -
⛩ Infura 支持 -
⚒ 将TxPool内容解析成原生值(以太坊地址和交易) - 容易获取挂起的交易 -
🖇 事件循环功能 -
🕵️♂️ 可以在“组装前”、“组装后”和“提交前”阶段添加或移除拦截、修改甚至取消交易工作流的“中间件” -
✅ 严格遵循标准(BIP、EIP等) - EIP-20(代币标准接口 - ERC-20)、EIP-67(标准 URI 方案)、EIP-155(重放攻击保护)、EIP-2718(类型化交易外壳)、EIP-1559(Gas 费市场变更)
- 和许多其他 (关于此 EIP 的详细内容请参阅 文档页面):EIP-681、EIP-721、EIP-165、EIP-777、EIP-820、EIP-888、EIP-1400、EIP-1410、EIP-1594、EIP-1643、EIP-1644、EIP-1633、EIP-721、EIP-1155、EIP-1376、ST-20
- RLP 编码
- Base58 编码方案
- 以太坊单位的格式化
- 全面的单元和集成测试覆盖
安装
Swift 包(推荐)
Swift 包管理器(Swift Package Manager)是一个用于自动化分发 Swift 代码的工具,与 Swift 构建系统很好地集成。
一旦设置了您的 Swift 包,将 web3swift
添加为依赖项就像将其添加到 Package.swift
文件的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/web3swift-team/web3swift.git", .upToNextMajor(from: "3.0.0"))
]
如果您项目不是包,请遵循以下指南在 如何将 Swift 包添加到 Xcode 项目中。
示例用法
在导入部分
import web3swift
import Web3Core
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理工具。您可以使用以下命令安装它
$ sudo gem install cocoapods
要使用 CocoaPods 将 web3swift 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '13.0'
target '<Your Target Name>' do
use_frameworks!
pod 'web3swift'
end
然后,运行以下命令
$ pod install
警告:CocoaPods 是管理 iOS 开发中依赖关系的强大工具,但它也有一些限制,这阻止我们提供一流的支持。我们强烈建议首先使用 SPM,因为使用 CocoaPods 将延迟新更新和错误修复的交付。
发送以太币
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)
合约读取方法
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()
编写事务并调用智能合约方法
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")
向节点发送网络请求
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
}
从源代码构建
SPM
git clone https://github.com/web3swift-team/web3swift.git
cd web3swift
swift build
需求
- iOS 13.0 / macOS 10.15
- Xcode 12.5
- Swift 5.5
文档
文档正在建设中👷🏻👷🏼♀️。我们尽力将所有公共API做详细的注释,但最终还有很多工作要做。但在最近的次要更新中,我们将添加已完成的大量文档的DocC支持。在此类贡献中,您的PR将非常受欢迎。
使用web3swift的项目
请查看我们的客户维基页面。
支持
如果您需要支持或希望为web3swift开发做出贡献,请加入我们的Discord和Telegram!
- 如果您需要帮助,请查看我们的常见问题解答或提交问题。
- 如果您想了解web3swift的最佳做法,请查看使用web3swift的项目。
- 如果您发现了错误,请提交问题。
开发
要进行本地开发和运行本地测试,我们建议使用ganache,它也用于GitHub Actions的CI跑步。
// To install
$ npm install ganache --global
// To run
$ ganache
这将创建一个本地区块链和一些在整个测试中使用测试账户。请确保ganache
在其默认端口8545
上运行。要在测试用例中更改端口,定位LocalTestCase.swift
并修改静态的url
变量。
在提交之前
我们在提交创建之前使用pre-commit本地运行验证。请从项目根目录安装pre-commit并运行pre-commit install
。之后,在每次提交之前,git钩子将运行并执行codespell
、swiftlint
和其他检查。
贡献
想要改进?太棒了:那么好消息是:我们在通过@gitcoin bot支付你的贡献!
贡献
- 欢迎您参加并通过贡献获得赏金!您的贡献将通过@gitcoin 奖金项目支付。
- 查找或创建一个问题。
- 您可以在Gitcoin 奖金列表中找到开放的奖金。
- 在分支中提交一个修复程序或新功能,推送您的更改。
- 向 develop 分支提交一个拉取请求
- 请提供详细描述以便我们更快地进行处理。
@skywinder 负责开源项目且不收取 web3swift 库的使用费用。我们希望继续尽我们所能推动项目的进展。
- 通过 @gitcoin 奖励计划 支持我们
- Ether 钱包地址:
0x6A3738c6299f45c31697aceA647D49EdCC9C28A4
致谢
- Alex Vlasov, @shamatar - 初始实现
- Petr Korolev, @skywinder - 引导和支持
- Anton Grigorev, @baldyash - 核心贡献者,积极使用并做了很多改进
- Yaroslav Yashin @yaroslavyaroslav - 3.0.0 版本及以后发布的核心贡献者。
- 感谢 web3swift 不断增长的贡献者名单。
安全公告
如果您认为您已经识别出 web3swift 的安全漏洞,请尽快通过电子邮件向 [email protected] 报告。请不要发布到公共问题跟踪器。
许可证
web3swift 在 Apache License 2.0 许可证下可用。请参阅 LICENSE 了解详情。