#attestation #ethereum #sdk #client #eas

eas-sdk-rs

Rust语言的Ethereum Attestation Service客户端库

1个不稳定版本

0.1.0 2024年4月1日

#2353 in 魔法豆

BSD-3-Clause

335KB
5K SLoC

该仓库包含用于与Ethereum Attestation Service协议交互的Rust编程语言的Ethereum Attestation Service SDK。

Ethereum Attestation Service (EAS) 是一个开源的基础设施公共产品,用于在链上或链下进行证明。

Rust SDK通过智能合约绑定与在不同EVM兼容区块链上部署的EAS智能合约交互。已部署合约的列表可以在EAS合约README文件中找到。该列表中所需网络对应的EAS合约地址应作为参数传递给客户端构造函数。

使用方法

异步客户端使用 ethers-rs 作为依赖项。要使用它,您需要将您的 Cargo.toml 设置为类似以下的内容

[dependencies]
ethers = "2.0"
eas-sdk = "0.1.0"

然后在您的代码中使用它

const SEPOLIA_CONTRACT_ADDRESS: &str = "0xC2679fBD37d54388Ce493F1DB75320D236e1815e";
const SEPOLIA_ENDPOINT: &str = "https://ethereum-sepolia-rpc.publicnode.com/";
const SEPOLIA_PRIVATE_KEY_HEX: &str = "enter your private key here";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let singing_key = &hex::decode(SEPOLIA_PRIVATE_KEY_HEX)?;
    let signing_key = SigningKey::from_slice(singing_key)?;
    let contract_address = H160::from_str(SEPOLIA_CONTRACT_ADDRESS)?;
    let client = client::Client::new(SEPOLIA_ENDPOINT, contract_address, None, signing_key).await?;

    // Register a new schema
    let schema = schema::SchemaBuilder::new()
        .add("id", schema::Type::Address)
        .add("voter_id", schema::Type::Address)
        .add("vote_option", schema::Type::Int(32))
        .build();

    let tx = client.schema_registry.register(schema, None, true).await?;
    let registered_schema = tx.await?;
    println!("Schema ID: {:?}", registered_schema.schema_uid);

    // Make a new attestation for the created schema
    let attestation_request = AttestationDataBuilder::new()
        .revocable(true)
        .data(&[
            Token::Address(H160::from_low_u64_be(0x1234567890abcdef)),
            Token::Address(H160::from_low_u64_be(0x1234567890abcdef)),
            Token::Int(11.into()),
        ])
        .build();

    // attest sends a transaction and returns a PendingTx that can be awaited
    let tx = client.eas.attest(&registered_schema.schema_uid, attestation_request).await?;
    let attested = tx.await?;

    println!("Attestation ID: {:?}", attested);

    Ok(())
}

同时 schema_registryeas 类型导出底层合约。如果需要,可以使用这些合约直接与abigen绑定交互。

状态

该项目是从需要使用Rust语言的Ethereum Attestation Service的需求中产生的。由于EAS仍在发展,我预计这个库也会随之发展。

项目仍处于早期阶段。已覆盖链上流程,但还有一些功能缺失,例如链下证明。如果您在使用SDK时发现缺失的功能,请随时联系或提出问题。

版本控制

客户端的每个版本都有标签,版本号相应更新。要查看过去版本的列表,请运行 git tag

贡献

我们热爱拉取请求!请参阅贡献指南。由于SDK是可选的且仍在不断发展,如果您发现某些功能损坏或缺失,请与我们联系或打开一个问题!

许可证

此库在LICENSE文件中提供的BSD风格许可证下分发。

依赖项

~27–43MB
~801K SLoC