128

签名

lizhipingsss · 于 发布 · 最后由 zmh883306258回复 · 949 次阅读

以太坊发送交易的时候,需要先进行一步验名吗,如果需要,如何知道签名已成功?

  • 128
    lizhipingsss

    如果我在以太访上记录了我了一份买卖合同信息,我怎么查看这份合同信息的签名

  • 128
    ajian1984

    @lizhipingsss 区块链上发送交易都需要先签名,以此保证发起交易人的身份同一性,因为一个地址发起的交易只有匹配的私钥才能签名。。签名只需要私钥,不需要与其他人交互也不需要上链,所以一笔交易一旦成功发送就算是签名成功。

  • 128
    ajian1984

    @lizhipingsss 应该这么理解。你要在以太坊上记录一些信息,首先要发送一笔交易,在发送交易时需要使用私钥签名。签名在本地进行验证。
    相关的签名信息不会上链,因此在链上是不可见的。
    至于你附加在交易里的信息,由于上链数据都是不可读的 16 进制字符,必须转码之后才能阅读查看。

  • 128
    lizhipingsss

    @ajian1984 如果我的签名信息在链上不可见的话,别人怎么验证我交易呢?

  • 128
    ajian1984

    @lizhipingsss 验证签名的工作不是让其他节点来完成的,是本地完成的。换句话来说,你签名之后,本地的软件会对你的交易进行验证,验证的意思是用公钥来验证相关的交易是不是经过相匹配的私钥发出的。验证完成,该交易才会被你的节点发送到交易池中等待打包。
    看这篇文章 引介 | 以太坊交易的生命周期

  • 128
    ajian1984

    @lizhipingsss 所以你到 Etherscan 上查看交易信息,你会发现,交易包含了发起地址、目标地址、数量、Gas 费用等等,但不会有什么东西叫做签名信息。。因为签名工作是在本地完成。所有交易都要在本地验证之后才能发到交易池中,自然也就不需要其他节点再行验证了

  • 128
    lizhipingsss

    @ajian1984 如果不验证签名的话,我的合同信息放在一个联盟链的话,我的合作方如何确认这个合同信息是我公司放上去且是真实有效的,而且链上的数据都是16进制显示的而且有一此其它信息,我的合作方如果下载链上的合同信息到本地,怎么能够把合同信息摘出来呢?

  • 128
    ajian1984

    @lizhipingsss
    1)并不是不验证签名,而是由本地的软件来验证。你的公司有一个密钥对,使用私钥发送交易;你公司发送交易时使用的客户端会使用你的公钥验证你的签名;一旦验证成功,则表示你公司使用了一个与你公司的公钥相匹配的私钥发送交易;
    又因为你公司的私钥(在不被偷盗的情况下)只有你公司有,所以交易一定是你公司发送的;
    2)交易中可以包含 16 进制的数据。这些 16 进制的数据可以被转码转成人类可读的信息。比如,原始数据是中文,使用 16进制编码后上链,则链上信息解码之后还是可以还原为中文。这只是一个例子,别的信息也可以同样处理。
    3)信息上链意味着该信息在那个时刻必定存在,但该信息本身是不是“可信”或者“有效”的信息则另当别论。换句话说,根据 1)大家都知道那信息是你们公司放上去的,但假如那个信息是一张合同,那张合同本身是不是有效的合同则并非上链所能保证。你的公司也可以先做假账,然后把假账上传。跟交易合作方的合同也可以拍张照,然后 PS 再把 PS 之后的版本放上去。所以区块链解决的是信息存在性证明。而不是信息的质量性证明。

  • 128
    lizhipingsss

    @ajian1984 我创建一个以太坊节点,如果通过java调用到eth的相关命令?

  • 128
    1428148408

    我想知道怎么在本地创建签名好的交易啊。。为什么我找不到发帖的地方。。新用户没有权限?
    我用的web3.js的web3.eth.sendRawTransaction这个方法,但是不知道私钥是那个字符串哪里来的。。原谅我在你的帖子下提问。。实在是卡住太久了,抱歉。

  • 128
    zmh883306258

    你好,想请问签名验签的问题解决了吗,想求教web3j可以获得某一账户的公钥吗