#gateway #identity #miraland #public-key #networking #civic

miraland-gateway

Miraland 链上身份网关,源自 Solana 链上身份网关

3 个版本 (破坏性更新)

0.3.0 2023年12月18日
0.2.0 2023年5月23日
0.1.0 2023年5月24日

#2534神奇豆


3 个 crate 中使用 (2 个直接)

MIT 许可证

79KB
1K SLoC

Solana 网关集成库

一个 Rust crate,可以被 Solana 程序用来限制对有效网关令牌持有者的访问。

网关令牌由守门人发行。具有类似网关令牌发行规则的一组守门人被定义为守门人网络。

链上程序通过将其公钥添加到程序账户中来选择一个可信赖的守门人网络。

然后,该库验证网关令牌是由该网络中的守门人发行的,并且是有效的。

用法

在 Cargo.toml 中

solana-gateway = "<LATEST VERSION>"

在指令处理器中(通常是 processor.rs)

use miraland_gateway::Gateway;
use solana_program::{
    account_info::AccountInfo,
    program_pack::Pack,
    pubkey::Pubkey,
};

fn process() {
    // The owner of the gateway token
    let owner: AccountInfo;
    // The gateway token presented by the owner
    let gateway_token_account_info: AccountInfo;
    // The gatekeeper network key
    let gatekeeper: Pubkey;

    let gateway_verification_result:Result<(), GatewayError> =
        Gateway::verify_gateway_token_account_info(
            &gateway_token_account_info, &owner.key, &gatekeeper, None
        );
}

高级用法

默认情况下,如果令牌已过期,verify 函数将失败。这对于某些守门人网络是一个重要的安全措施,尤其是那些需要持续监控令牌所有者的网络。

在与此无关的守门人网络中,建议发行不带过期时间的令牌。

但是,在某些场景中,过期的令牌仍可能被认为是有效的。或者集成者可能希望设置一个容差值。

忽略过期

let gateway_verification_result:Result<(), GatewayError> =
        Gateway::verify_gateway_token_account_info(
            &gateway_token_account_info, &owner.key, &gatekeeper, {
                Some(VerificationOptions {
                    check_expiry: false,
                    ..Default::default()
                },
            }
        );

设置容差

let gateway_verification_result:Result<(), GatewayError> =
        Gateway::verify_gateway_token_account_info(
            &gateway_token_account_info, &owner.key, &gatekeeper, {
                Some(VerificationOptions {
                    check_expiry: true,
                    expiry_tolerance_seconds: Some(120),    // allow 2 minutes tolerance for token expiry
                },
            }
        );

依赖项

~19–29MB
~490K SLoC