返回首页
当前位置: 主页 > 精通Office > 其他教程 >

如何实现一个定制的智能合约地址

时间:2018-11-05 22:30来源:知行网www.zhixing123.cn 编辑:麦田守望者

我学习智能合约的一个主要途径就是在 DappRadar 看各个热门应用的源代码,前些天我在看  dice2win 的时候发现一个有趣的现象:虽然它自从上线以来已经多次部署过智能合约,不过让人好奇的是这些地址有一个特点,都有一个和名字很像的 「D1CE」前缀(因为的地址是十六进制的,所以字母 I 被改为了数字 1)。

 

如何实现呢,其实 ethereum 源代码里已经给出答案:

func CreateAddress(b common.Address, nonce uint64) common.Address {
data, _ := rlp.EncodeToBytes([]interface{}{b, nonce})
return common.BytesToAddress(Keccak256(data)[12:])
}

也就是说,合约地址完全是由 address 和 nonce 决定的,如果我们希望用一个全新的账户来部署合约,那么当它第一次部署的时候,nonce 必然是 0,于是乎可以推断合约地址完全是由 address 决定的,顺着这个思路,我们只要不断生成新的 address,然后判断它们第一次部署的合约地址是否满足定制的 pattern 即可,附上 golang 源代码:

编译后,当执行命令行的时候,指定你想要的 pattern 即可,一旦匹配成功,我们就可以通过生成的账户来部署合约了,不过在部署前你需要确保账户里有足够的以太来支付部署费用。我在 ropsten 测试网络部署了一个地址前缀定制为 ABCD 开头的合约:

 

import (
"encoding/hex"
"flag"
"fmt"
"regexp"
"sync"
"sync/atomic"

"github.com/ethereum/go-ethereum/crypto"
)

var (
concurrency = flag.Int("c", 10, "concurrency")
number = flag.Int64("n", 1, "number")
pattern = flag.String("p", "", "pattern")
)

func init() {
flag.Parse()
}

func main() {
var wg sync.WaitGroup

wg.Add(*concurrency)

reg := regexp.MustCompile("^0x" + *pattern)
nonce := uint64(0)

for i := 0; i < *concurrency; i++ {
go func() {
defer wg.Done()
run(reg, nonce)
}()
}

wg.Wait()
}

func run(reg *regexp.Regexp, nonce uint64) {
for *number > 0 {
key, _ := crypto.GenerateKey()
address := crypto.PubkeyToAddress(key.PublicKey)
contract := crypto.CreateAddress(address, nonce).Hex()

if !reg.MatchString(contract) {
continue
}

if atomic.AddInt64(number, -1) < 0 {
break
}

privateKey := hex.EncodeToString(key.D.Bytes())

fmt.Printf("Contract:\t%s\nAddress:\t%s\nPrivateKey:\t%s\n\n",
contract,
address.Hex(),
privateKey,
)
}
}


需要说明的是,源代码匹配的时候使用了正则,这可能有点慢,如果追求更高的效率,可以牺牲一下匹配的灵活度,通过「strings.HasPrefix」来按字符串匹配。

 
 
 

package main

------分隔线----------------------------
标签(Tag):智能合约地址
------分隔线----------------------------
推荐内容
  • Chrome 浏览器清除历史记录

    Chrome 浏览器是我觉得所有浏览器中最好用的,没有之一。虽然我自己电脑上还装了 Fire...

  • 如何从零搭建一个自动化运维体系

    对自动化运维体系的需求,是随着业务的增长、对运维效率和质量的要求不断提高而产生的...

  • 手把手教你如何做IP安全策略

    服务器的安全可以通过设定IP安全策略来得到一定的保护,对于每个Windows网管人员来说I...

  • 如何解决电脑双硬盘引起的异常响声

    电脑就有了两块硬盘:SSD(装系统)+ HDD(装电影,你懂的~),感觉就是爽歪歪! 问题...

  • 知行网教你快速打造属于自己的U盘图标

    大家是否厌倦了千盘一面,也想和小明一样,拥有属于自己的个性化U盘图标?其实,这很...

  • PotPlayer正在运行迅雷时播放视频黑屏怎么办?解决P

    PotPlayer正在运行迅雷时播放视频黑屏怎么办?解决PotPlayer迅雷播放黑屏问题! 最近我...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8国际平台入口
  • Photoshop龙8国际平台入口
  • 3DMAX龙8国际平台入口
  • AutoCAD龙8国际平台入口
  • CorelDRAW龙8国际平台入口
  • Matlab龙8国际平台入口
  • 其他龙8国际平台入口
  • .Net龙8国际平台入口
  • Asp龙8国际平台入口
  • Php龙8国际平台入口
  • Jsp龙8国际平台入口
  • Ajax龙8国际平台入口
  • Android教程
  • 其他龙8国际平台入口
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影