PHP生成助记词和BTC、ETH、LTC地址

本文作者:陈进坚
个人博客:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
简书:https://www.jianshu.com/u/8ba9ac5706b6
联系方式:jian1098@qq.com

安装扩展

composer require bitwasp/bitcoin		# BTC库,需要运行在64位的php7.0+上
composer require web3p/ethereum-util	 # ETH库

注意:使用bitwasp库需要安装PHPgmp扩展,不然会报错Call to undefined function gmp_init()LNMP环境安装gmp扩展可以看我的另一篇文章《LNMP1.6安装gmp扩展》

生成助记词

<?php
require_once './vendor/autoload.php';

use BitWasp\Bitcoin\Address\PayToPubKeyHashAddress;
use BitWasp\Bitcoin\Crypto\Random\Random;
use BitWasp\Bitcoin\Key\Factory\HierarchicalKeyFactory;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39Mnemonic;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39SeedGenerator;
use BitWasp\Bitcoin\Mnemonic\MnemonicFactory;

 //生成助记词
function createMnemonicWord(){
     // Bip39
     //$math = Bitcoin::getMath();
     //$network = Bitcoin::getNetwork();
     $random = new Random();
     // 生成随机数(initial entropy)
     $entropy = $random->bytes(Bip39Mnemonic::MIN_ENTROPY_BYTE_LEN);
     $bip39 = MnemonicFactory::bip39();
     // 通过随机数生成助记词
     $mnemonic = $bip39->entropyToMnemonic($entropy);
     // 输出助记词
     echo $mnemonic;
 }

创建BTC地址

function createBtcAddress($mnemonicWord,$offset){
        $seedGenerator = new Bip39SeedGenerator();
        // 通过助记词生成种子,传入可选加密串'hello'
        $seed = $seedGenerator->getSeed($mnemonicWord);
        echo "seed: " . $seed->getHex() . PHP_EOL;				//种子
        $hdFactory = new HierarchicalKeyFactory();
        $master = $hdFactory->fromEntropy($seed);
        $hardened = $master->derivePath("44/0'/0'/0/".$offset);    //44的含义:https://github.com/bitcoin/bips
        echo 'WIF: ' . $hardened->getPrivateKey()->toWif();		  //私钥
        $address = new PayToPubKeyHashAddress($hardened->getPublicKey()->getPubKeyHash());
        return $address->getAddress();
    }

参数说明:mnemonicWord(带空格的字符串)是上一步生成的助记词;offset(整数)是同一个助记词生成的第几个地址,相同助记词传入相同数字会得到同一个地址

创建ETH地址

use Web3p\EthereumUtil\Util;	//头部要额外引入这个类

// Bip39
$math = Bitcoin::getMath();
$network = Bitcoin::getNetwork();
$random = new Random();
// 生成随机数(initial entropy)
$entropy = $random->bytes(Bip39Mnemonic::MIN_ENTROPY_BYTE_LEN);
$bip39 = MnemonicFactory::bip39();
// 通过随机数生成助记词
$mnemonic = $bip39->entropyToMnemonic($entropy);
echo "mnemonic: " . $mnemonic.PHP_EOL.PHP_EOL;// 助记词

$seedGenerator = new Bip39SeedGenerator();
// 通过助记词生成种子,传入可选加密串'hello'
$seed = $seedGenerator->getSeed($mnemonic);
echo "seed: " . $seed->getHex() . PHP_EOL;
$hdFactory = new HierarchicalKeyFactory();
$master = $hdFactory->fromEntropy($seed);

$util = new Util();
// 设置路径account
$hardened = $master->derivePath("44'/60'/0'/0/0");
echo " - m/44'/60'/0'/0/0 " .PHP_EOL;
echo " public key: " . $hardened->getPublicKey()->getHex().PHP_EOL;
echo " private key: " . $hardened->getPrivateKey()->getHex().PHP_EOL;// 可以导入到imtoken使用的私钥
echo " address: " . $util->publicKeyToAddress($util->privateKeyToPublicKey($hardened->getPrivateKey()->getHex())) . PHP_EOL;// 私钥导入imtoken后一样的地址

创建LTC地址

<?php
require_once './vendor/autoload.php';

use BitWasp\Bitcoin\Address\PayToPubKeyHashAddress;
use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Crypto\Random\Random;
use BitWasp\Bitcoin\Key\Factory\HierarchicalKeyFactory;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39Mnemonic;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39SeedGenerator;
use BitWasp\Bitcoin\Mnemonic\MnemonicFactory;
use BitWasp\Bitcoin\Network\NetworkFactory;

// Bip39
$math = Bitcoin::getMath();
// 设置莱特币网络
$network = NetworkFactory::litecoin();
$random = new Random();
// 生成随机数(initial entropy)
$entropy = $random->bytes(Bip39Mnemonic::MIN_ENTROPY_BYTE_LEN);
$bip39 = MnemonicFactory::bip39();
// 通过随机数生成助记词
$mnemonic = $bip39->entropyToMnemonic($entropy);
//$mnemonic = 'security hurdle lift acoustic skate recall hotel elegant amateur hidden escape slow';
echo "mnemonic: " . $mnemonic.PHP_EOL.PHP_EOL;// 助记词

$seedGenerator = new Bip39SeedGenerator();
// 通过助记词生成种子,传入可选加密串'hello'
$seed = $seedGenerator->getSeed($mnemonic);
echo "seed: " . $seed->getHex() . PHP_EOL;
$hdFactory = new HierarchicalKeyFactory();
$master = $hdFactory->fromEntropy($seed);

$hardened = $master->derivePath("44'/2'/0'/0/0");
echo 'WIF ' . $hardened->getPrivateKey()->toWif($network);
echo PHP_EOL;
$address = new PayToPubKeyHashAddress($hardened->getPublicKey()->getPubKeyHash());
echo 'address ' . $address->getAddress($network);
echo PHP_EOL;

参考文章

  • https://www.cnblogs.com/ygcool/p/11714335.html
  • https://iancoleman.io/bip39/
  • https://github.com/bitcoin/bips
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您希望在 TradingView 上加载 BTC 数据,并根据该数据下单 ETH,您可以使用 `security()` 函数来加载 ETH 数据。下面是一个例子: ``` //@version=4 strategy("My Strategy") btc_data = security("COINBASE:BTCUSD", timeframe.period, close) eth_data = security("COINBASE:ETHUSD", timeframe.period, close) buy_signal = crossover(sma(btc_data, 10), sma(btc_data, 50)) sell_signal = crossunder(sma(btc_data, 10), sma(btc_data, 50)) if (buy_signal) strategy.entry("My Long Entry Id", strategy.long) strategy.order("My Long Entry Id", false, qty=100/eth_data, limit=eth_data, oco=1) if (sell_signal) strategy.entry("My Short Entry Id", strategy.short) strategy.order("My Short Entry Id", true, qty=100/eth_data, limit=eth_data, oco=2) strategy.exit("My Long Entry Id", "My Long Exit Id", stop=close * 0.9) strategy.exit("My Short Entry Id", "My Short Exit Id", stop=close * 1.1) ``` 这个策略加载了 COINBASE:BTCUSD 和 COINBASE:ETHUSD 的数据,并使用 BTC 数据生成交易信号。当 BTC 的 10 日移动平均线上穿 50 日移动平均线时,会产生一个买入信号,当 BTC 的 10 日移动平均线下穿 50 日移动平均线时,会产生一个卖出信号。在这个策略中,下单时使用了 `strategy.order()` 函数,它可以在指定的价位和数量下单,这里使用了 `100/eth_data` 计算以 BTC 为基础的 ETH 数量, `limit=eth_data` 设置以此价格下单, `oco=1` 和 `oco=2` 分别表示两个互斥的订单。在这个策略中,止损条件分别设置为买入价的 10% 和卖出价的 10%。 请注意,这只是一个示例策略,实际的交易策略需要更加复杂和全面的考虑。在进行实际交易之前,请确保您对市场有足够的了解,并根据您的交易计划调整您的策略。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值