├── 190722-secp256k1-ecdsa-dangers.pdf ├── 190729-bitcoin-hdwallet.pdf ├── 190805-intro-ed25519-curves.pdf ├── 190812-secp256k1-endomorphism.pdf ├── CIP ├── CIP101.cn.md └── CIP102.cn.md └── README.md /190722-secp256k1-ecdsa-dangers.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coinexchain/docs/77a6014ec90a739934a5b77af13219549c4cf7f2/190722-secp256k1-ecdsa-dangers.pdf -------------------------------------------------------------------------------- /190729-bitcoin-hdwallet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coinexchain/docs/77a6014ec90a739934a5b77af13219549c4cf7f2/190729-bitcoin-hdwallet.pdf -------------------------------------------------------------------------------- /190805-intro-ed25519-curves.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coinexchain/docs/77a6014ec90a739934a5b77af13219549c4cf7f2/190805-intro-ed25519-curves.pdf -------------------------------------------------------------------------------- /190812-secp256k1-endomorphism.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coinexchain/docs/77a6014ec90a739934a5b77af13219549c4cf7f2/190812-secp256k1-endomorphism.pdf -------------------------------------------------------------------------------- /CIP/CIP101.cn.md: -------------------------------------------------------------------------------- 1 | ### 在CoinEx Chain生态中使用的URL 2 | 3 | 4 | 5 | 定义一套URL,不但可以用在线下的二维码支付上,在线上,还能起到点击链接启动钱包App的作用。为不同的协议scheme(如http、ftp、telnet、ssh、mailto)注册不同的软件来打开,是所有操作系统都支持的功能。浏览器还可以通过registerProtocolHandler来让网页版钱包来处理这些URL(https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler ) 6 | 7 | URL的形式如下: 8 | 9 | ``` 10 | [scheme:][//[userinfo@]host][/]path[?query][#fragment] 11 | ``` 12 | 13 | 在CoinEx Chain中,scheme为“cet”;userinfo是用户的alias或者bech32地址,它是可选的,如果网页根据上下文可以知道完成操作的用户是谁,那么可以用userinfo指定,这样就免去了在钱包软件里还得点选一下(钱包软件可以管理好几个账户的私钥);host分为两部分,第一部分是功能模块(account、comment、staking等等),第二部分是链的名称,目前固定为dex,未来启动了新的智能合约链或隐私链的话,还可以增加smart和private;path和query根据具体的操作而定。 14 | 15 | 目前我们先定义这五种形式的URL: 16 | 17 | ``` 18 | cet://[userinfo@]host]account.dex/pay?from=blabla&to=blabla&toalias=bla&amount=blabla&memo=blabla×tamp=blabla 19 | cet://[userinfo@]host]account.dex/3rd?from=blabla&to=urlA&op=blabla&extra=blabla 20 | cet://comment.dex/view?token=cet&id=10000 21 | cet://staking.dex/delegate?validator=blabla 22 | cet://asset.dex/view?token=cet 23 | 24 | ``` 25 | 26 | 第一种是转账(pay),参数to指定收款人的bech32地址,参数toalias指定收款人的别名,钱包软件应该检查别名和bech32地址的对应关系,不对应则拒绝转账;amount是金额,可选,格式是“数字+Token名称”,目前Token名称强制加sato前缀,而且数字必须是整数,未来,可以考虑放宽为Token名称不加sato前缀,数字是浮点数;memo是附注,可选,内容可以是任意(注意在URL中需要做百分号编码,即Percent-encoding);timestamp是时间戳,可选,内容是RFC3339格式的时间,表示这个转账URL是在什么时刻生成的,这个RFC3339格式的时间,会被放在memo的开头,用空格同后面的内容隔开(如果后面还有其他内容的话)。可选参数from和userinfo都可以用来指定打款人的账号或alias,二者只能使用一个,一般只有当使用alias且alias中包含“@”时,才需要使用from参数。 27 | 28 | 第二种是第三方授权,目的是:使用链上账户的私钥签署某些信息,从而在第三方网站上登录,或者授权第三方网站完成某些操作。可选参数from和userinfo都可以用来指定签署者的账号或alias,二者只能使用一个,一般只有当使用alias且alias中包含“@”时,才需要使用from参数。参数to表示第三方网站的一个URL,钱包App完成签署后的签名信息要提交到这里;参数op表示授权什么操作,取值不限于英文,login、登录、transfer、站内转账等等都可以;参数extra包含操作的一些额外信息,它必须是一个json串。 29 | 30 | 第三种是看帖(view),参数token指定股吧中的某个论坛,参数id指定某一个帖子。应用的场景:1、项目方在自己的主页上做宣传,说去股吧打赏某个帖子就给空投;2、在传统社交媒体上给出股吧帖子的链接。 31 | 32 | 第四种是参与staking(delegate),参数validator是候选validator的地址。应用场景:validator在自己的主页上放置一个链接,“点击这里把CET投给我吧!”。 33 | 34 | 第五种是在钱包App里打开某个token的主页。主页中包含关于token的概要信息、汇总信息,以及到market和bancor-contract的链接。 35 | 36 | -------------------------------------------------------------------------------- /CIP/CIP102.cn.md: -------------------------------------------------------------------------------- 1 | ### 用于在线钱包与离线钱包交互的QR Code内容格式 2 | 3 | 4 | 5 | 定义一套格式,符合该格式的内容通过二维码的形式在离线钱包和在线钱包之间交互信息。 6 | 7 | 根据交互方向,这些信息分为两类 8 | 9 | - 在线钱包 —> 离线钱包 10 | 11 | - 待签名的交易 12 | - 离线钱包 —> 在线钱包 13 | 14 | - 签名 15 | - 地址信息 16 | 17 | 格式字符集为utf-8 18 | 19 | 20 | 21 | #### 待签名交易 22 | 23 | 这是真实的待签名字节流: 24 | 25 | ``` 26 | {"account_number":"0","chain_id":"coinex-test1","fee":{"amount":[{"amount":"10000000","denom":"cet"}],"gas":"200000"},"memo":"transfer coins","msgs":[{"type":"bankx/MsgSend","value":{"amount":[{"amount":"10000000","denom":"cet"}],"from_address":"coinex1zy2xsltl9mh56p3vqrtz96s8fmxt4ugjjp7xtx","to_address":"coinex132pv8ku2w68syqse6rexykatwtxy8vaa0xwv4h","unlock_time":"0"}}],"sequence":"1"} 27 | ``` 28 | 29 | 压缩策略: 30 | 31 | 1. 所有字段都要填写,包括可选字段 32 | 2. 按key的字典序排序 33 | 3. 去掉字典序排序后的json串中的所有key和key之后的冒号 34 | 4. 在上述处理后的字符串前添加执行签名操作的地址,目前只支持单个地址,地址与后续字符串以冒号分隔 35 | 36 | 经过压缩后的待签名字节流如下: 37 | 38 | ``` 39 | coinex1zy2xsltl9mh56p3vqrtz96s8fmxt4ugjjp7xtx:{"0","coinex-test1",{[{"10000000","cet"}],200000"},"transfer coins",[{"bankx/MsgSend",{[{"10000000","cet"}],"coinex1zy2xsltl9mh56p3vqrtz96s8fmxt4ugjjp7xtx","coinex132pv8ku2w68syqse6rexykatwtxy8vaa0xwv4h","0"}}],"1"} 40 | ``` 41 | 42 | 上述字节流以字符串的形式编码到二维码中,以上步骤由在线钱包完成,生成的二维码供离线钱包扫描 43 | 44 | 45 | 46 | #### 签名 47 | 48 | 签名结果以字符串形式编码成二维码,提供给在线钱包扫描 49 | 50 | ``` 51 | {"pub_key":{"type":"tendermint/PubKeySecp256k1","value":"Auz8GN+i6HrDxEVAzJChtZ3wwdm0Rc25HyzaW7Vm9bB1"},"signature":"ePDa9h0KR+u8ago5tqOKKjPPsXHPzTgL+j0Vek0h0MQUpCgPW15N8Zq2D6V6FHCkAqnvXSb7n1PE/AK4rnGSsA=="} 52 | ``` 53 | 54 | 55 | 56 | #### 地址信息 57 | 58 | 地址信息包括地址别名,地址,公钥三个字段,字段之间以逗号分隔 59 | 60 | ``` 61 | bob,coinex12dhtv0w8qlhh5un8d3yzpl9zhyugc9ufhma4ud,coinexpub1addwnpepq2p80g68dtsk4af5p5la63adxg65shgv4m69npdvzctrcwdd7jpggrfcjn3 62 | ``` 63 | 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docs 2 | 这个repo已经不再使用,不要往这个repo里继续提交内容。 3 | 4 | * 新的CIP放在[CIPs](https://github.com/coinexchain/CIPs)里 5 | * pdf挪到了[research](https://github.com/coinexchain/research/tree/master/crypto)里 6 | --------------------------------------------------------------------------------