php usdt地址生成

首先下载扩展类

composer require paragonie/ecc:^2.5

composer require kornrunner/keccak:^1.1

php开启扩展gmp

composer require kornrunner/secp256k1

在写一个地址通用类

<?php

namespace app\common;

use kornrunner\Keccak;

use kornrunner\Serializer\HexPrivateKeySerializer;

use Mdanter\Ecc\EccFactory;

class UsdtAddress

{

public function generateTronAddress()

{

$adapter = EccFactory::getAdapter();

$generator = EccFactory::getSecgCurves()->generator256k1();

privateKey = generator->createPrivateKey();

// 修正:传入 generator 而不是 adapter

serializer = new HexPrivateKeySerializer(generator);

privateKeyHex = serializer->serialize($privateKey);

// Get public key (uncompressed)

publicKey = privateKey->getPublicKey();

x = str_pad(gmp_strval(publicKey->getPoint()->getX(), 16), 64, '0', STR_PAD_LEFT);

y = str_pad(gmp_strval(publicKey->getPoint()->getY(), 16), 64, '0', STR_PAD_LEFT);

pubkeyHex = '04' . x . $y;

// Keccak256 hash, take last 20 bytes

hash = Keccak::hash(substr(hex2bin(pubkeyHex), 1), 256);

addressHex = '41' . substr(hash, -40); // TRON address prefix is 41

// Base58Check encoding

addressBin = hex2bin(addressHex);

checksum = substr(hash('sha256', hash('sha256', addressBin, true), true), 0, 4);

base58Address = this->base58_encode(addressBin . checksum);

return [

'private_key' => $privateKeyHex,

'address' => $base58Address,

];

}

// Base58 encode helper

function base58_encode($input)

{

$alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';

base_count = strlen(alphabet);

num = gmp_init(bin2hex(input), 16);

$encoded = '';

while (gmp_cmp($num, 0) > 0) {

list(num, rem) = gmp_div_qr(num, base_count);

encoded = alphabetgmp_intval($rem) . $encoded;

}

// Handle leading zeros

foreach (str_split(input) as byte) {

if ($byte === "\x00") {

encoded = alphabet0 . $encoded;

} else {

break;

}

}

return $encoded;

}

}

相关推荐
唐青枫4 分钟前
Yii2 Controller 详解:路由、Action、过滤器与 CRUD 实战
php
念越10 分钟前
题库、练习与错题本代码阅读
开发语言·数据结构
WeiXin_DZbishe10 分钟前
基于Node.js的马拉松赛事管理系统的设计与实现-计算机毕设 附源码【课程设计】90211
java·javascript·vue.js·python·php·课程设计
l1t12 分钟前
几种数据库软件count(distinct)和count()from group by子查询性能测试
开发语言·数据库
熊猫钓鱼>_>21 分钟前
大学图论第 6 讲:网络流与二分图匹配——对偶性让瓶颈自己现形
开发语言·算法·面试·职场和发展·图论·校招·面经
方便面不加香菜21 分钟前
C++ 关于多态的知识点讲解
开发语言·c++
jimy142 分钟前
C++ 类成员函数的内联定义(inline)详解
开发语言·c++
Nebula_g1 小时前
JavaSE高级:动态代理
java·开发语言·算法·javase
青春逝如流水1 小时前
Java 线程与操作系统、硬件的关系:状态、映射与差异
java·开发语言·多线程·ai文章
谢亮_vipxieliang1 小时前
Go gRPC基础与实战
开发语言·后端·golang