打字猴:1.703877749e+09
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 ]  [ 下一页 ]