查询智能合约的创建信息

 

1 以太坊浏览器上面查询智能合约创建信息

https://etherscan.io上查询一个智能合约地址,信息显示如图所示。

其中有一条 

Contract Creator:	0x0a88fb486012021369048452d7d5fbeb705da3c6at txn 0xe441928ac4300472d55a4ec2af81ec8533888c08170f4cc5ab9eab974facf200

可以查询到该合约创建者和创建的交易Hash。可是用web3.js是没有这种根据合约地址查询创建信息的API接口。所以只能采取曲线查询的方式。

2 在私链上面发布智能合约再查询

用truffle在发布智能合约:

~/mycoin$ sudo truffle migrate --reset --network test
Using network 'test'.

Running migration: 1_initial_migration.js
  Replacing Operate...
  ... 0xba211783e05078cd81b5d46b0e442396cc49e892e4fcf42189fd3df4bf7e1b10
  Operate: 0xcad15f625d1f88c8f5e8a99cb767cb4a6047cda4
Saving artifacts...

geth控制台显示:

INFO [08-11|17:32:45.124] Submitted contract creation              fullhash=0xba211783e05078cd81b5d46b0e442396cc49e892e4fcf42189fd3df4bf7e1b10 contract=0xCAD15f625d1f88C8f5E8a99cB767cb4a6047cda4
INFO [08-11|17:32:45.124] contract create or call 
> miner.start()
INFO [08-11|17:34:39.830] Updated mining threads                   threads=0
INFO [08-11|17:34:39.830] Transaction pool price threshold updated price=12000000000000
INFO [08-11|17:34:39.830] Starting mining operation 
null
> INFO [08-11|17:34:39.831] contract create or call 
INFO [08-11|17:34:39.831] Commit new mining work                   number=6 txs=1 uncles=0 elapsed=1.120ms
> miner.stopINFO [08-11|17:34:42.142] Successfully sealed new block            number=6 hash=679ca4…241eec
INFO [08-11|17:34:42.142] 

根据交易Hash查询交易:

> eth.getTransaction("0xba211783e05078cd81b5d46b0e442396cc49e892e4fcf42189fd3df4bf7e1b10")
{
  blockHash: "0x679ca4d75b77cb78038e73bf83ab53b67f3718449f27e1d73fef977374241eec",
  blockNumber: 6,
  from: "0xc004fdeb4dac9827c695c672daa2afb0ed2d0779",
  gas: 4712388,
  gasPrice: 100000000000,
  hash: "0xba211783e05078cd81b5d46b0e442396cc49e892e4fcf42189fd3df4bf7e1b10",
  input: "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104a78061005e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806388d695b21461005c578063a9059cbb1461010e578063d0e30db014610168575b600080fd5b341561006757600080fd5b6100f460048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050610172565b604051808215151515815260200191505060405180910390f35b341561011957600080fd5b61014e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610338565b604051808215151515815260200191505060405180910390f35b610170610479565b005b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156101d257600080fd5b600085511180156101e4575083518551145b15156101ef57600080fd5b600091505b845182101561032c57838281518110151561020b57fe5b90602001906020020151905060008111801561023e5750803073ffffffffffffffffffffffffffffffffffffffff163110155b151561024657fe5b848281518110151561025457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561029d57600080fd5b7f473edf73b107bf5d270ea55a7ea4ce98a1b5618dd196e00d5a48e101299b26d485838151811015156102cc57fe5b9060200190602002015182604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a181806001019250506101f4565b60019250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561039557600080fd5b6000821180156103bc5750813073ffffffffffffffffffffffffffffffffffffffff163110155b15156103c457fe5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561040457600080fd5b7f473edf73b107bf5d270ea55a7ea4ce98a1b5618dd196e00d5a48e101299b26d48383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001905092915050565b5600a165627a7a723058205fb39c49499010a26981f1a6be8277513c924d6944baa145319bce9a14432c490029",
  nonce: 1,
  r: "0x77a36a3baa4ddd0256bf5af5d584ab555ca27d652e338efa1aa005e9e1b95aa",
  s: "0x2371c2c14733ed36960dacfe95c7e1fe28a8acbc328f3ac5a3ba35d886b8e5cd",
  to: null,
  transactionIndex: 0,
  v: "0x10a",
  value: 0
}

返回结果是看不到合约地址的。但是可以查到合约发起人,还有一条很关键的信息,to字段为null,说明这是一条创建智能合约的交易。根据交易Hash查询receipt:

> eth.getTransactionReceipt("0xba211783e05078cd81b5d46b0e442396cc49e892e4fcf42189fd3df4bf7e1b10")
{
  blockHash: "0x679ca4d75b77cb78038e73bf83ab53b67f3718449f27e1d73fef977374241eec",
  blockNumber: 6,
  contractAddress: "0xcad15f625d1f88c8f5e8a99cb767cb4a6047cda4",
  cumulativeGasUsed: 311742,
  from: "0xc004fdeb4dac9827c695c672daa2afb0ed2d0779",
  gasUsed: 311742,
  logs: [],
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  root: "0xff6ce64173777d02b14cfa6beaf59da25e680129ffbf058bbe53bdcdea4dcd59",
  to: null,
  transactionHash: "0xba211783e05078cd81b5d46b0e442396cc49e892e4fcf42189fd3df4bf7e1b10",
  transactionIndex: 0
}
> 

终于查询到合约地址了,结果与truffle端显示的一致!

3 java服务器端如何根据合约地址查询

第二步中查询的基本思路是先根据交易Hash使用eth.getTransaction(hash)查询,如果结果中的to字段为空,则说明是创建智能合约的交易,再使用eth.getTransactionRecept(hash)查询。java端使用web3j库使用transaction事件监听是监听不到truffle发起的合约创建交易的。web3j可以监听block事件,根据block查询其中的transactions字段,transactions字段包含了block中打包的所有交易,包括合约创建交易。然后将结果存入数据库中。以后直接从数据库中进行查询。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能合约的理念,何谓“抵押品”? “抵押品”的目的是什么?它怎样梳理了我们的已 有的关系? 我认为,尤其是合约的规范化,在我们的关系层面实现了理想化抵押品 的蓝图。 多种类型的合约条款, 如抵押品,债券,产权界定等等, 可以嵌入在我 们执行条款的硬件和软件中,通过这样的方式使那些不遵守协议者的违约成 本很高,(如果需要的话,令人望而却步的)。举一个典型的活生生的例子, 我们可以认为智能的原始祖先,是不起眼的自动售货机。 在潜在的、 损失有 限的评估后,使钱箱里的钱远远少于破坏者付出的代价。 根据显示的价格该 机收取硬币, 通过一个简单的机制形成了最初的计算机设计科学,有限自动, 传递变化和制造。自动售货机是搬运合约:任何持有硬币的人可以与供应商 交易。锁箱和其他安全机制保护储藏的硬币和货物会不被破坏, 足以允许自 动售货机有利可图地在各种各样的区域部署。 优越于自动售货机,智能合约通过数字的方法来控制有价值的、所有类 型的任何资产。智能合约涉及到一个动态的、经常主动运作的财产,且提供 更好的观察和核查点,其中主动措施必须分毫不差。 作为另一个例子,为汽车而设计出的假想数字保障系统。智能合约设计 策略建议:持续完善抵押品协议以便其更充分地嵌入到处理资产的合约条款 中。根据合约条款, 这些协议将使加密密钥完全控制于具有操作属性的人,其人正当地拥有该财产。在最简单的实现中,为了防止偷窃,除非被合法的 拥有者完成正确的”挑战-应答“过程,否则车可以呈现出不可操作状态。 如果汽车用做以确保还贷,在这种传统的方式来在实现强大的安全性同 时将创造一个头痛的债权人 - 收款人将不再能够查收赖账的车。为了解决这 一问题,我们可以创建一个智能扣押权协议:如果物主不交费,智能合约调 用扣押权协议,其把车钥匙的控制权交给银行。该协议可能会比雇佣追债人 更便宜、 更有效。进一步的细化,如生成可证明的扣押权权注销,以及当贷 款已还清、处于困境和意外情况下的账户操作。例如,当车子在 75 号高速路 上奔跑的时候,撤销车子的操作将是粗鲁的。 在连续细化的过程中,我们从一个粗糙的抵押品体系,具体化到一个个 具体化的合约: (1)选择性地允许业主锁定和排除第三方 (2)允许债权人接入的秘密途径 (3A)只在违约一段时间且没有付款时秘密途径被打开; 并且 (3b)最后的电子支付完成后将永久地关闭秘密途径。 成熟的抵押品体系将针对不同的合约执行不同的行为。继续讨论我们的 例子,如果汽车的合约是一个租赁,最终付款将关闭承租人访问权; 购买了 债权,那就关掉债权人的访问。通过连续的重新设计方式,抵押品体系越来 越接近其合约的精髓:管理了覆盖财物,信息或被抵押的。可定性的、 不同 的合约条款,以及在财产在属性的技术差异,则引出不同的协议

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值