Hello , 我是09

此篇内容为我2018~2020年在【库神】工作时,对部分重要知识做的学习总结

随着比特币冲破10万美金,行业又再次兴起,希望相关从业者可以学习到你需要的内容

如果你的公司正准备生产卡片式钱包,你不知道从何入手的话,Let's go.

圖1_幣託BitoPro冷錢包「守護藍」、「尊爵黑」.jpg

卡式钱包卡号规则

每张卡片钱包要有自己的独一无二的卡号,就和银行卡一样,卡号既可以用来后台做记录 ,又可以快速区分卡的型号、批次、支持币种、防伪验证等。那么卡号是如何编写的呢 ?

卡号由以下结构组成:

CL          T2            0107    0000         001                  X
CL + 发行商卡号 + 型号 + 批次号 + 系列号 + 最后一位luhn校验码
计算校验码由以下结构组成:
0107    0000         001                  X
型号 + 批次号 + 系列号 + 最后一位luhn校验码
将计算校验码用到的数据组成到一块:
01070000001X

紧接着从右向左,所有的偶数位乘以2,如果乘积为两位数,那么将两位数拆开后相加,将所有偶数位乘积后的结果相加到一块 再加上 校验码X,使整体的值取膜于10后,结果为0,方为正确的卡号。

例1:错误卡号
原始数据
CLT2010800000018
原始数据 从右往左 乘以2 后
CLT2010800000028
型号 + 批次号 + 系列号 + 最后一位luhn校验码
0108 + 0000 + 002 + 8 = 1 + 8 + 2 + 8 = 19
19 % 10 = 9, 不等于0 ,所以卡号错误

例2:正确卡号
原始数据
CLT2010800000019  
原始数据 从右往左 乘以2 后
CLT2010800000029
型号 + 批次号 + 系列号 + 最后一位luhn校验码
0108 + 0000 + 002 + 9 = 1 + 8 + 2 + 9 = 20
20 % 10 = 0, 等于0,所以卡号正确

以下正确卡号例子
CLT2010800000019
CLT2010800000027
CLT2010800000035
CLT2010800000043
CLT2010800000050

卡生产流程

版面印刷 — 压卡 — 烧录 — 卡号内置(烧录程序的时候需要提供两个接口,给厂商写入卡号,读取卡号) — 卡读取 — 镭卡号(刻录卡号到卡片上)

我们 做的 包括  cos 程序 + 写入 + 读取

卡片钱包与App交互协议

交互方案具体要根据实际项目情况,但至少要具备以下几点内容:

  1. 传输协议

  2. 指令包格式

  3. 基础功能指令交互数据

  4. 创建钱包

  5. 恢复钱包

  6. 签名交易

传输协议中有包括:指令、种子类型、芯片状态、工作模式、公钥格式、分层确定性算法类型等

.1) 指令,在数据参数中参数名称为“Method”。

指令名称

指令码

备注

GetBaseInfo

0x03

读取芯片的基本信息

GenerateEntropy

0x04

生成随机种子熵

CreateWalllet

0x05

创建新钱包

RestoreWallet

0x06

恢复钱包

GetExistedEntropy

0x07

获取当前钱包种子熵

VerifyEntropy

0x08

设置种子熵验证状态

GetSecretKey

0x09

获取指定路径私钥

ModifyWalletName

0x12

修改钱包名称

GetXpub

0x0B

获取指定路径的扩展公钥

SignTxEd25519

0x0C

交易签名

ModifySPass

0x11

修改安全密码

DeleteWallet

0x13

删除钱包

GetSEStatus

0x18

获取SE状态

所有的指令都是in + out,热端发起哪个指令,返回的数据也是哪个指令。

2 ). 种子类型

类型名称:SeedType

字段名

备注

word12

0

12个单词

word15

1

15个单词

word18

2

18个单词

word21

3

21个单词

word24

4

24个单词

3 ). 芯片状态

类型名称:Status

字段名

备注

new

0

芯片未激活

empty

1

芯片已激活,用户未创建钱包

loaded

2

芯片已激活,用户已经创建了钱包

以上均为举例说明,如果你需要09提供一些建议,请留言

卡生产周期

第一阶段

厂商给我们提供样卡2~4张,需要我们提供测试cos程序,只用作测试写入和读取卡号。

第二阶段

签订合同起30天内厂商给我们提供200张样卡,35日内我们要提供给厂商最终cos程序。

第三阶段

样卡200张全部收到后,60天内(具体时间需要根据各自的实际情况来电),对方交付完成全部产品。

总结

卡片钱包生产一般会有偶发性的问题,200张样卡需要测试人员拿到后疯狂测试并及时和厂商反馈。

流程上并没有复杂的地方,当然这是指在一系列有效的沟通基础上。

卡片钱包和手机App的数据交互是真正的关键点,加密方式,BTC如果一笔交易中的UTXO过多,卡片钱包是否能支持,支持的数据长度,卡片存储内容,等等,需要根据实际的项目情况来定制。