web3swift 3.1.2

web3swift 3.1.2

skywinderAnton GrigorevYaroslav Yaroslav 维护。



 
依赖
Starscream~> 4.0.4
Web3Core~> 3.1.2
 

web3swift 3.1.2

  • Alex Vlasov,Anton Grigorev,Petr Korolev 和 Yaroslav Yashin 编写。

web3swift

web3swift 是与以太坊网络交互的 iOS 工具包。

社交媒体

如果您需要支持或想为 web3swift 开发做出贡献,请加入我们的DiscordTelegram

matter-github-swift Web3swift CI Swift Platform CocoaPods Compatible License support Stackoverflow


核心功能

  • Web3.js 功能的 Swift 实现
  • 💭通过 JSON RPC 与远程节点交互
  • 🔐本地 密钥存储管理(与 geth 兼容)
  • 🤖智能合约 ABI 解析
  • 🔓ABI 解码(支持回传结构体,部分来自 0.4.22 Solidity 编译器)
  • 🕸以太坊名称服务(ENS)支持 - 一种安全且去中心化地使用简单、易读的名字来寻址区块链上和链下资源的方式
  • 🔄 智能合约交互(读取/写入)
  • Infura 支持
  • 将TxPool内容解析成原生值(以太坊地址和交易) - 容易获取挂起的交易
  • 🖇 事件循环功能
  • 🕵️‍♂️可以在“组装前”、“组装后”和“提交前”阶段添加或移除拦截、修改甚至取消交易工作流的“中间件”
  • 严格遵循标准(BIP、EIP等)
    • BIP32(HD 钱包)、BIP39(种子短语)、BIP44(密钥生成前缀)
  • 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开发做出贡献,请加入我们的DiscordTelegram

开发

要进行本地开发和运行本地测试,我们建议使用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钩子将运行并执行codespellswiftlint和其他检查。

贡献

想要改进?太棒了:那么好消息是:我们在通过@gitcoin bot支付你的贡献!

贡献

  1. 欢迎您参加并通过贡献获得赏金!您的贡献将通过@gitcoin 奖金项目支付。
  2. 查找或创建一个问题
  3. 您可以在Gitcoin 奖金列表中找到开放的奖金。
  4. 在分支中提交一个修复程序或新功能,推送您的更改。
  5. develop 分支提交一个拉取请求
    1. 请提供详细描述以便我们更快地进行处理。

@skywinder 负责开源项目且不收取 web3swift 库的使用费用。我们希望继续尽我们所能推动项目的进展。

  • 通过 @gitcoin 奖励计划 支持我们
  • Ether 钱包地址: 0x6A3738c6299f45c31697aceA647D49EdCC9C28A4

致谢

安全公告

如果您认为您已经识别出 web3swift 的安全漏洞,请尽快通过电子邮件向 [email protected] 报告。请不要发布到公共问题跟踪器。

许可证

web3swift 在 Apache License 2.0 许可证下可用。请参阅 LICENSE 了解详情。