EtherscanClient 0.0.1

EtherscanClient 0.0.1

Jason Du 维护。



  • 作者:
  • Jason Du

EtherscanClient

Version License Platform

简介

Etherscan API 客户端是 Rest API 的 Swift 版本。

示例

要运行示例项目,请克隆仓库,然后首先从 Example 目录中运行 pod install

安装

EtherscanClient 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod 'EtherscanClient'

作者

如有任何问题,请随时通过电子邮件向我发送 [email protected]

许可证

EtherscanClientffmpeg可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。

初始化

Etherscan Client必须使用API密钥和一个账户地址进行初始化。

let client = EtherscanClient(apiKey: "XXXXXXXXXXXXXXXXXX", accountAddress: "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b")

账户

以下调用是Etherscan的账户模块的一部分。

获取以太币余额

一次最多处理20个账户。不使用任何参数将调用默认的accountAddress获取余额。addresses:一个可选的地址数组,默认为nil

client.getBalance() { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

let addresses = ["0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", 
                 "0x63a9975ba31b0b9626b34300f7f627147df1f526",
                 "0x198ef1ec325a96cc354c7266a038be8b5c558f67"]
                 
client.getBalance(addresses: addresses) { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

获取“正常”交易的列表

  • address:可选的交易地址。默认为初始账户地址
  • startBlock:可选的起始区块编号
  • endBlock:可选的结束区块编号
  • page:可选的页码。与偏移量一起使用。如果设置为空,则查询将返回最多10000次交易。
  • offset:可选的偏移量。每页的交易数量
/// Gets a list of normal transactions from the default account
client.getTransaction() { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

/// Gets a list of normal transactions from an address
client.getTransaction(address: "0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

/// Get a filtered list of normal Transactions based on start and end block
client.getTransaction(startBlock: "0", endBlock: "99999999") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

/// Get a paginated list of normal Transactions
client.getTransaction(page: "1", offset: "10") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

获取“内部”交易的列表

  • address:交易地址。默认为初始账户地址
  • txHash:使用地址查询的替代方案。查询 txHash 时地址必须设置为 null
  • startBlock:可选的起始区块编号
  • endBlock:可选的结束区块编号
  • page:可选的页码。与偏移量一起使用。如果设置为空,则查询将返回最多10000次交易。
  • offset:可选的偏移量。每页的交易数量
/// Gets a list of internal transactions from the default account 
client.getInternalTransaction() { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

/// Get a list of internal transactions by transaction hash
client.getInternalTransaction(txhash: "0x40eb908387324f2b575b4879cd9d7188f69c8fc9d87c901b9e2daaea4b442170") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

按地址获取“ERC20 - Token Transfer Events”列表

  • address:转账事件地址。默认为初始账户地址
  • startBlock:可选的起始区块编号
  • endBlock:可选的结束区块编号
  • page:可选的页码。与偏移量一起使用。如果设置为空,则查询将返回最多10000次交易。
  • offset:可选的偏移量。每页的交易数量
  • contractAddress:ERC20合同的合约地址
/// Get a list of all ERC20 token transfers from the default account
client.getErc20Transfers() { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

/// Get a list of ERC20 transfers from a specific ERC20 token
client.getErc20Transfers(contractAddress: "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

按地址获取挖掘的区块列表

  • address:区块地址。默认为初始账户地址
  • blockType:可以是 .blocks.uncles。默认为 .blocks
  • page:可选的页码。与偏移量一起使用。如果设置为空,则查询将返回最多10000次交易。
  • offset:每页的交易数量
client.getBlocksMined() { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

/// Getting uncle blocks mined
client.getBlocksMined(blockType: .uncles) { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

合约

以下调用是 Etherscan 的 合约模块的一部分

获取已验证合约源代码的合约 ABI

  • address:合约地址
client.getContractABI(address: "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

获取已验证合约源代码的合约源代码

  • address:合约地址
client.getSourceCode(address: "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

交易

以下调用是Etherscan的交易模块的一部分

检查合约执行状态(如果在合约执行期间出现错误)

  • txHash:交易哈希
client.checkContractExecutionStatus(txHash: "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

检查交易回执状态(仅适用于比(Byzantium)分叉后的交易)

  • txHash:交易哈希
client.checkContractExecutionStatus(txHash: "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

区块

以下调用是Etherscan的区块模块的一部分

通过区块号获取区块和叔父奖励

  • blockno:区块号
client.getBlockReward(blockno: "2165403") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

通过块号获取预估区块倒计时时间

  • blockno:区块号
client.getBlockCountDown(blockno: "16100000") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

根据时间戳获取区块编号

  • timestamp: 秒级的Unix时间戳
  • closest: .before.after
client.getBlockNo(timestamp: "1578638524", closest: .before) { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

事件日志

以下调用是Etherscan的事件模块的一部分

获取事件日志

事件日志API旨在提供对原生的eth_getLogs的替代方案。出于性能和安全的考虑,仅返回前1000个结果。请缩小过滤参数

  • fromBlock: 块号,整数或 'latest'
  • toBlock: 块号,整数或 'latest'
  • address: 事件地址
  • topicx: .topic0. topic1. topic2,或 .topic3
  • topicxbytes: topicx字节(32字节)
  • topicOperator: 仅在包含topic y时使用。可以是 .and.or
  • topicy: 使用 .topic1.topic2.topic3
  • topicybytes: topicy字节(32字节)
client.getEventLog(fromBlock: "379224", toBlock: "latest", address: "0x33990122638b9132ca29c723bdf037f1a891a70c", topicx: .topic0, topicxbytes: "0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

client.getEventLog(fromBlock: "379224", toBlock: "latest", address: "0x33990122638b9132ca29c723bdf037f1a891a70c", topicx: .topic0, topicxbytes: "0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545", topicOperator: .and, topicy: .topic1, topicybytes: "0x72657075746174696f6e00000000000000000000000000000000000000000000") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

代币

以下调用是Etherscan的代币模块的一部分

通过合约地址获取ERC20-Token TotalSupply

contractAddress: ERC20代币地址

client.getErc20TotalSupply(contractAddress: "0x57d90b64a1a57749b0f932f1a3395792e12e7055") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

根据 TokenContractAddress 获取 ERC20 代币账户余额

contractAddress: ERC20 代币的地址 address: 账户地址

client.getErc20AccountBalance(contractAddress: "0x57d90b64a1a57749b0f932f1a3395792e12e7055", address: "0xe04f27eb70e025b78871a2ad7eabe85e61212761") { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

燃气跟踪器

获取确认时间估算

  • gasPrice: 以 wei 为单位的 gas 价格
client.getGasEstimationTime(gasPrice: "2000000000") { result in 
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

获取 gas oracle

client.getGasOracle { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

统计信息

以下调用是 Etherscan 的 统计模块的一部分

获取以太币总供应量

client.getTotalEthSupply { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

获取以太币上次价格(在 BTC 和 USD 中)

client.getEthLastPrice { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

获取以太坊节点大小

  • startDate: 开始日期必须为 'yyyy-MM-dd' 格式
  • endDate: 结束日期必须为 'yyyy-MM-dd' 格式
  • clientType: 必须是 .geth 或 .parity
  • isArchived: 如果同步模式为归档或默认的标志值(可选)
client.getEthNodeSize(startDate: "2019-02-01", endDate: "2019-02-28", clientType: .geth) { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

client.getEthNodeSize(startDate: "2019-02-01", endDate: "2019-02-28", clientType: .geth, isArchived: true) { result in
    switch result {
    case .success(let result):
        print(result)
    case .failure(let error):
        print(error)
    }
}

待办事项

代理模块

当前,来自代理模块返回的数据全部为十六进制编码。

经过验证的合约地址和名称列表

Etherscan 发布了一个 csv 列表https://etherscan.io/exportData?type=open-source-contract-codes