成为StarkEx的Oracle(中介价格)供应商
永续交易的StarkEx使用外部价格信息,这些价格信息在oracle中介价格新报价业务中提供给系统。 StarkEx 永续交易支持将来自许多Oracle 中介价格/供应商的许多价格组合到一个定额中。
此页面描述了要成为StarkEx 永续交易的Oracle中介价格供应商所需执行的技术步骤。
此处的文档引用了python脚本,在下面的伪代码中称为public_cli,该脚本将很快由StarkWare开源。 同时,如果您有需要,请与我们联系。

第一步:从以太坊的Key Pair(私钥和公钥)派生出您的Stark Key Pair(私钥和公钥)

如加密部分中所述,STARK证明使用了以太坊的不同 hash functions and signatures 哈希函数和签名,因此为了在系统上签名价格,您将需要创建您的私有starkKey。 在此处演示了一种我们推荐的简单而又安全的方法,该方法可以使用您的以太坊密钥创建starkKey
    1.
    在常量字符串“ StarkKeyDerivation”上创建一个以太坊签名(或0x537461726b4b657944657269766174696f6e
    2.
    哈希(使用keccak)将r和s签名组成一个256位字
    3.
    删除结果数字的最后5位,以获取251位stark私钥
    4.
    使用相关的CLI函数从stark私钥中衍生出stark公钥
例如:
1
Using Ganache's default Eth account:
2
eth_key = 0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d
3
eth_address = 0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1
4
eth_signature =
5
fd85e77f5bb436eb90a4c3324a02fea6ef766e6ac85bffccb6e1cdc03479e9ac
6
058e6fb13916131dd4df1911098e2df71d582ab86281bf2553e55571aa99064b
7
1c
8
eth_signature_hash = keccak256(r, s) =
9
0x2f008fa70d291380abafd4a98029ff706940d392b2a30d57c09d49a2447407f2
10
stark_private_key = last251Bits(ethSignatureHash) =
11
178047D3869489C055D7EA54C014FFB834A069C9595186ABE04EA4D1223A03F
12
stark_key = public_cli(starkPrivateKey) =
13
0x1895a6a77ae14e7987b9cb51329a5adfb17bd8e7c638f92d6892d76e51cebcf
Copied!

第二步:将StarkKey公钥添加到链上配置

对于每个assetId,链上合同将被允许签署此资产的受信任的公共密钥列表作为其合成资产配置的一部分保存。 oracle的公钥必须被包含在配置中。 否则,STARK证明将无法使用其签名。
由于应用程序是唯一允许更新链上配置的一方,因此此步骤需要征得应用程序的同意。
出于安全原因,在系统已部署之后向链上配置添加新的公钥,只有在一个时间锁定期(通常是几周)之后才会生效,以允许不赞成更改的用户退出。

第三步:开始签署价格

计算哈希值以进行登录

使用以下字段在CLI中调用哈希函数:
    1.
    timestamp时间戳-32位数字(自纪元以来的秒数)
    2.
    price价格-120位数字,小数点后有18个小数位
    3.
    asset_name(您所选择的,每项资产,例如“ BTCUSD”)-128位数字
    4.
    oracle_name(您的身份,例如“ Chain”)-40位数字
在特定资产上签名的每个Oracle实体(即Chainlink,Maker等)的所有供应商,参数3和4应该保持一致。
CLI函数组合并哈希相关参数,如下所示:
1
timestamp = January 1st, 2020 = hex(1577836800) = 0x5e0be100
2
price = $11512.34 = hex(11512.34 * (10**18)) = 0x27015cfcb0230820000
3
asset_name = 128bits(hex("BTCUSD")) = 0x42544355534400000000000000000000
4
oracle_name = hex("Maker") = 0x4d616b6572
5
first_number = 0(84-bit) || AssetName (128-bit) || oracleName (40-bit) =
6
425443555344000000000000000000004d616b6572
7
second_number = 0(100-bit) || Price(120-bit) || Timestamp (32-bit) =
8
27015cfcb02308200005e0be100
9
data_hash = pedersen(first_number, second_number) =
10
3e4113feb6c403cb0c954e5c09d239bf88fedb075220270f44173ac3cd41858
Copied!

使用签名函数对散列消息进行签名

例如:
1
signature = StarkSign(key=stark_private_key, data=data_hash) =
2
r: 0x6a7a118a6fa508c4f0eb77ea0efbc8d48a64d4a570d93f5c61cd886877cb920
3
s: 0x6de9006a7bbf610d583d514951c98d15b1a0f6c78846986491d2c8ca049fd55
Copied!
Last modified 5mo ago