1703877749
1703877750
4)Generate Details按钮用于显示地址,Generate NewSeed按钮用于生成一个新的、独一无二的seed。用户单击Generate Details按钮就调用generate_Addresses()方法,单击Generate New Seed按钮就调用generate_seed()方法。
1703877751
1703877752
5)这时就有了一个空的有序列表。当用户单击Generate Details按钮时,将动态显示seed地址、余额和相关私钥。
1703877753
1703877754
6)最后有另外一张表单,其中有from地址、to地址和要转账的以太币数量。from地址必须是当前未排序列表中显示的地址之一。
1703877755
1703877756
现在编写HTML代码调用的每个函数的实现。首先编写代码,生成一个新的seed。将这段代码放入main.js文件:
1703877757
1703877758
1703877759
1703877760
1703877761
keystore命名空间的generateRandomSeed()方法用于生成一个随机seed。它用接受一个可选参数,即一个表示额外的熵的字符串。
1703877762
1703877763
1703877764
在一些算法中或者需要随机数的地方会用到熵。熵通常来自于硬件源或者已经存在的硬件源,例如鼠标移动,或者特别提供的随机数生成器。
1703877765
1703877766
生成一个独特的seed需要非常高的熵。LightWallet内置了生成唯一seed的方法。LightWallet生成熵使用的算法取决于环境。但是如果能生成更好的熵,就可以把生成的熵传送给generateRandomSeed(),它将在内部与generateRandomSeed()生成的熵进行拼接。
1703877767
1703877768
生成随机seed之后,调用generate_Addresses方法。该方法以seed作为参数,并在其中显示地址。在生成地址之前,它会问用户想要多少个地址。
1703877769
1703877770
generate_Addresses()方法的实现如下。把如下代码放入main.js文件中:
1703877771
1703877772
1703877773
1703877774
1703877775
1703877776
1703877777
1703877778
上述代码的执行过程如下:
1703877779
1703877780
1)首先有一个变量totalAddresses,它存储用户希望生成的地址总数。
1703877781
1703877782
2)检查参数seed是否定义了。如果没有定义,则从输入栏抓取seed。这样做,generate_Addressess()方法可以用于显示信息seed,如果用户单击Generate Details按钮,还同时生成一个新的seed。
1703877783
1703877784
3)使用isSeedValid()方法验证keystore命名空间的seed。
1703877785
1703877786
4)请用户输入想要生成和展示多少地址并进行验证。
1703877787
1703877788
5)keystore命名空间中的私钥总是加密存储的。在生成密钥时,需要进行加密;在签署交易时,需要解密。衍生对称加密密钥的密码可以由用户输入,或者提供一个随机字符串作为密码。为了使用户体验更好,生成一个随机字符串,将它用作密码。对称加密密钥没有存储在keystore命名空间里,因此只要进行与私钥相关的操作,例如生成密钥、访问密钥等,就需要从密码生成密钥。
1703877789
1703877790
6)使用createVault方法创建keystore实例。createVault用一个对象和一个回调函数作为参数。对象可以有4种属性:password、seedPharse、salt和hdPathString。password是必选项,其他的都是可选项。如果不提供seedPharse,它会生成和使用一个随机seed。拼接salt与password,以提高对称密钥加密技术的安全性,因为攻击者不仅要找到password还得找到salt。如果不提供salt,它就会随机生成。keystore命名空间存储未加密的salt。hdPathString用于为keystore命名空间提供默认衍生路径,即生成地址、签署交易等。如果不提供衍生路径,则使用该衍生路径。如果不提供hdPathString,则默认值为m/0’/0’/0’。这个衍生路径的默认目的是签名。可以创建新的衍生路径或者使用keystore实例的addHdDerivationPath()方法重写当前衍生路径的purpose。还可以使用keystore实例的setDefaultHdDerivationPath()方法改变默认衍生路径。最后,一旦keystore命名空间被创建,就通过回调函数返回实例。所以,这里仅用keyword和seed创建了一个keystore。
1703877791
1703877792
7)生成用户指定数量的地址及其相关密钥。从一个seed中可以生成数百万个地址,因为keystore不知道用户想生成多少个地址,所以在此之前不会生成任何地址。在创建keystore之后,使用keyFromPassword方法从密码中生成对称密钥,然后调用generateNewAddress()方法生成地址及其相关密钥。
1703877793
1703877794
8)generateNewAddress()有3个实参,即密码衍生的密钥、生成地址的数量和衍生路径。因为没有提供衍生路径,它使用keystore的默认衍生路径。如果多次调用generateNewAddress(),它会从在最后一次调用中创建的地址重新开始。例如,如果调用该方法两次,每次生成两个地址,则将得到前四个地址。
1703877795
1703877796
9)使用getAddresses()获取存储在keystore上的全部地址。
1703877797
1703877798
10)使用exportPrivateKey方法解码和检索地址私钥。
[
上一页 ]
[ :1.703877749e+09 ]
[
下一页 ]