Trezor钱包JS开发文档

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

requestLogin - 请求登录

通过Trezor钱包的挑战/应答验证。为了对抗重放攻击,开发者应当 使用后端生成的随机的challengeHidden。开发者也可以提供在钱包上 可视的挑战。

服务后端需要检查签名是否匹生成的challengeHidden、提供的 challengeVisual和保存的publicKey字段。如果是的话,后端 要么创建账户(如果publicKey是首次出现),要么登入用户 (如果publicKey是已知用户)。

要理解完整机制,请参考 SLIP-0013:确定性层级验证

调用方法

ES6:

const result = await TrezorConnect.requestLogin(params);

CommonJS:

TrezorConnect.requestLogin(params).then(function(result) {

});

参数:

可选的公共参数:

  • useEmptyPassphrase:总是设置为true,并且本方法忽略

使用服务端异步挑战的登录:

  • callback:TrezorConnect将调用该函数来获取challengeHidden和challengeVisual,必须

不使用异步挑战的登录:

  • challengeHidden:16进制字符串,必须
  • challengeVisual:显示在Trezor上的文本,必须

示例代码

基于服务端异步挑战的登录:

TrezorConnect.requestLogin({ 
    callback: function() {
        // here should be a request to server to fetch "challengeHidden" and "challengeVisual"
        return {
            challengeHidden: '0123456789abcdef',
            challengeVisual: 'Login to',
        }
    }
})

不使用异步挑战的登录:

TrezorConnect.requestLogin({ 
    challengeHidden: '0123456789abcdef',
    challengeVisual: 'Login to',
})

返回结果

{
    success: true,
    payload: {
        address: string,
        publicKey: string,
        signature: string,
    }
}

错误信息:

{
    success: false,
    payload: {
        error: string // error message
    }
}

服务端示例

下面是不同语言的服务端签名验证示例:

C# Javascript PHP Python Ruby

从之前版本迁移

版本4及更早:

// site icon, optional. at least 48x48px
var hosticon = 'https://example.com/icon.png';
// server-side generated and randomized challenges
var challenge_hidden = '';
var challenge_visual = '';
TrezorConnect.requestLogin(
    hosticon,                // hosticon is moved to common parameters
    challenge_hidden,
    challenge_visual
    function(result) {
        result.signatures    // not changed
        result.public_key    // renamed to "publicKey"
        result.version       // removed, it's not possible to use this method witch outdated firmware
        // added "address" field
    }
);

版本5:

// params are key-value pairs inside Object
TrezorConnect.requestLogin({ 
    challengeHidden: '',
    challengeVisual: '',
}).then(function(result) {
    ...
})