python实现web3多重签名交易

使用Web3.py构建、签署、发送以太坊交易 无论是普通转账,还是智能合约的写入,都可以认为是一笔交易(Transaction)。在区块链世界,可导致区块链数据发生变化的数据,可简单理解为一笔“交易”。相反,send_raw_transaction处理的,反而是对以上文本数据进行签署后,生成的数据(二进制或16进制形式)。B. 构建build_transaction() + 签署sign_transaction + 发送send_raw_transaction()A. 使用transact(), 底层还是自动调用的send_transaction() 阅读详情

web3多重签名交易

Web3 中的多重签名交易(Multisig Transaction)解析

Web3 里的多重签名交易(Multisig Transaction),是指一笔区块链交易并非由单个私钥的签名来决定能否执行,而是需要多个独立私钥共同签名授权。

这是一种极具代表性的安全增强机制,在钱包管理、DAO(去中心化自治组织)治理、金库管理以及团队共管资产等众多场景中得到了广泛应用。


🚀 多重签名(Multisig)究竟是什么?

简单来讲:

一笔资金的动用,需要 2~3 个甚至更多人共同签字确认。

举例说明:

  • 共管钱包场景:3 个合伙人共同管理一个钱包。
  • 签名门槛设置:设定为**至少 2 人同意(即 2/3 签名)**才可进行转账操作。
  • 系统验证机制:系统会自动验证是否达到预设的签名门槛(threshold)。
  • 执行结果判定:若达到门槛,交易将执行;否则,资产不会发送。

这一机制有效避免了单点风险,即避免了因一个人丢失私钥或私钥被黑客攻击,而导致资金损失的情况。


🔐 多重签名结构(以以太坊为例)

在以太坊上,常用的多重签名实现方式是智能合约式 Multisig,例如 Gnosis Safe。其具体结构和工作流程如下:

  • owners:一组地址列表,代表拥有签名权限的各方。
  • threshold:签名门槛,即达成交易所需的最少签名数量。
  • 交易发起与编码:当发起交易时,交易内容会被编码为一个“交易体”。
  • 签名过程:每个 owner 使用自己的私钥对交易体进行签名。
  • 合约验证:智能合约验证收到的签名数量是否达到预设的 threshold。
  • 执行判定:若达到 threshold,交易执行;若未达到,交易拒绝。

需注意,多重签名本质上是在智能合约的内部逻辑中实现的,并非链上原生支持的特性。


🧩 为什么需要多重签名?

下表通过对比单签钱包和多重签名钱包,清晰展示了多重签名的优势:

风险单签钱包多重签名钱包
私钥丢失资产无法找回,面临永久损失风险多钥冗余设计,不会全部丢失,降低资产损失风险
私钥泄露资产瞬间被盗,损失难以挽回单钥泄露无法直接导致资产被盗,需多方批准才能执行交易
团队资产管理安全性较低,易出现内部管理问题透明度高,可实现多人共管,提升团队资产管理安全性
DAO 治理不支持,无法满足 DAO 去中心化治理需求是 DAO 的基础模块,助力实现去中心化、透明化治理

由此可见,多重签名能够有效解决团队管理资产、防范黑客攻击与盗窃、实现治理流程透明化等痛点问题。


🛠 在 EVM 链上如何进行多签?

在 EVM 链上实施多重签名的流程通常如下:

  1. 创建 Multisig 合约:选择合适的工具(如 Safe)创建一个多重签名合约。
  2. 设置参数:设定 owners(拥有签名权限的地址列表)和 threshold(签名门槛)。
  3. 发起交易:发起一笔转账或执行合约调用的交易。
  4. 生成交易哈希:合约生成该笔交易的唯一哈希值。
  5. 独立签名:每个 owner 使用自己的私钥对交易进行独立签名。
  6. 提交签名:发起“执行交易”请求,将所有签名打包并提交至合约。
  7. 验证与执行:合约验证签名数量,若满足 threshold,则执行交易;否则拒绝。

📌 常见 Multisig 应用场景

  • DAO 金库管理:用于管理价值数千万的资金,实现多人共管,保障资金安全。
  • L1 / L2 跨链桥管理员:确保跨链操作的安全性和可靠性,防止资金在跨链过程中出现损失。
  • 交易所冷钱包:采用多重签名机制,增强冷钱包的安全性,降低私钥泄露风险。
  • Web3 项目团队资金:方便团队成员共同管理项目资金,提高资金使用的透明度和安全性。
  • NFT 项目 mint 权限控制:通过多重签名控制 NFT 的铸造权限,防止未经授权的铸造行为。
  • 高额资金的安全保管:为高额资金提供更高级别的安全保障,降低资金被盗风险。

🧭 多重签名交易与普通交易的区别是什么?

下表从多个维度对比了单签交易和多重签名交易的特点:

项目单签交易多重签名交易
私钥数量仅需 1 个私钥需要多个独立私钥共同签名
验证方由链的 ECDSA 算法进行验证由智能合约逻辑进行验证
执行过程立即执行,无需额外授权需要多次签名后统一执行,确保多方同意
安全性相对较低,易受单点风险影响极高,通过多重验证降低风险
透明度一般,交易信息相对不透明签名和执行过程均可审计,透明度高

多重签名的流程

在这里插入图片描述

python 实现一个简单的多重签名交易

  1. 一个简单的 Solidity 多签合约(可部署),使用 ECDSA 验签并要求签名按地址严格递增以防重放/重复。
  2. 一个Python 脚本(web3.py + eth-account + py-solc-x),包含:编译、部署合约、用多个私钥对交易签名、把签名打包并调用合约执行交易。
  3. 逐步说明与注意事项,便于你在本地(Anvil / Ganache / Hardhat 节点)直接跑通。

假设你本地运行的以太坊节点地址为 http://127.0.0.1:8545(Anvil / Ganache 常用)。如果不同,把 RPC_URL 改成你的节点即可。

首先创建一个合约文件,保存到contracts/MultiSigWallet.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

/// Simple multisig wallet that verifies Ethereum signed messages.
/// Owners must be unique and signatures must be provided in strictly increasing address order
contract SimpleMultiSig {
    address[] public owners;
    mapping(address => bool) public isOwner;
    uint256 public threshold;
    uint256 public nonce;

    event ExecuteTransaction(address indexed to, uint256 value, bytes data, uint256 nonce);
    event Deposit(address indexed sender, uint256 value);

    constructor(address[] memory _owners, uint256 _threshold) {
        require(_owners.length > 0, "owners required");
        require(_threshold > 0 && _threshold <= _owners.length, "invalid threshold");

        for (uint i = 0; i < _owners.length; i++) {
            address owner = _owners[i];
            require(owner != address(0), "invalid owner");
            require(!isOwner[owner], "owner not unique");
            isOwner[owner] = true;
            owners.push(owner);
        }
        threshold = _threshold;
    }

    // Allow contract to hold ETH
    receive() external payable {
        emit Deposit(msg.sender, msg.value);
    }

    // Computes the message hash that owners must sign (keccak256)
    function getMessageHash(address to, uint256 value, bytes memory data, uint256 _nonce) public pure returns (bytes32) {
        // we hash the calldata too; use keccak256(data) to handle variable length
        return keccak256(abi.encodePacked(to, value, keccak256(data), _nonce));
    }

    // Prefix to mimic eth_sign (EIP-191)
    function getEthSignedMessageHash(bytes32 messageHash) public pure returns (bytes32) {
        // "\x19Ethereum Signed Message:\n32" + messageHash
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash));
    }

    // Execute transaction if enough valid signatures provided.
    // signatures: concatenated (r (32) || s (32) || v (1)) for each signer, in order of signer addresses (strictly increasing)
    function executeTransaction(address to, uint256 value, bytes calldata data, bytes calldata signatures) external {
        bytes32 messageHash = getMessageHash(to, value, data, nonce);
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);

        uint256 sigCount = signatures.length / 65;
        require(sigCount >= threshold, "not enough signatures");

        address lastRecovered = address(0);
        uint256 offset = 0;
        uint256 validSignatures = 0;

        for (uint i = 0; i < sigCount; i++) {
            bytes32 r;
            bytes32 s;
            uint8 v;

            // extract r, s, v
            assembly {
                r := calldataload(add(signatures.offset, offset))
                s := calldataload(add(signatures.offset, add(offset, 32)))
                v := byte(0, calldataload(add(signatures.offset, add(offset, 64))))
            }

            offset += 65;

            // ecrecover returns address(0) on failure
            address recovered = ecrecover(ethSignedMessageHash, v, r, s);
            require(recovered != address(0), "invalid signature");
            require(isOwner[recovered], "not owner");
            require(recovered > lastRecovered, "signatures not strictly ordered or duplicate"); // enforce strict order to prevent duplicates
            lastRecovered = recovered;
            validSignatures++;

            if (validSignatures == threshold) break; // early exit when threshold met
        }

        require(validSignatures >= threshold, "threshold not met");

        nonce += 1;

        // execute call
        (bool success, ) = to.call{value: value}(data);
        require(success, "tx execution failed");

        emit ExecuteTransaction(to, value, data, nonce - 1);
    }

    // Helpers: get owners count
    function getOwners() external view returns (address[] memory) {
        return owners;
    }
}

安装相关的库

pip install web3 eth-account py-solc-x

# 先导入需要的包
from web3 import Web3
from eth_account import Account
from eth_account.messages import encode_defunct

RPC_URL = "http://127.0.0.1:8545"      # 改成你的 RPC
CHAIN_ID = 31337                       # 本地节点常用 1337/31337/1 等,根据节点调整
GAS = 3_000_000
w3 = Web3(Web3.HTTPProvider(RPC_URL))
assert w3.is_connected()
# --- compile Solidity (py-solc-x) ---
from solcx import compile_source, install_solc

install_solc("0.8.18")
<Version('0.8.18')>
simple_multisig_source = open("contracts/MultiSigWallet.sol", "r", encoding="utf-8").read()

compiled = compile_source(
    simple_multisig_source,
    output_values=["abi", "bin"],
    solc_version="0.8.18"
)

contract_id, contract_interface = compiled.popitem()
abi = contract_interface["abi"]
bytecode = contract_interface["bin"]
# --- 选择三个测试账户(您可以使用本地节点账户或生成临时账户) ---
# 为了演示,我们创建了三个临时账户,并从节点的第一个账户(必须拥有以太币)中为其充值(这里我使用了Anvil的测试账户)
acct0 = w3.eth.accounts[0]
acct1 = w3.eth.account.create()  # 所有者1
acct2 = w3.eth.account.create()  # 所有者2
acct3 = w3.eth.account.create()  # 所有者3
owners = [acct1.address, acct2.address, acct3.address]
threshold = 2
print("Owner addresses:", owners)
print("Threshold:", threshold)
Owner addresses: ['0xcD57A2da868DaD6d1A26660C32BFfAFA0eBF9b32', '0x1dD2D95820f25a28fd8352671eFcC9324b90Bd3a', '0x796109581b5B339DdCa42c860b4F8dC21f7A0AB7']
Threshold: 2
# 从节点的“矿工费”账户中为所有者账户充值(假设节点已解锁账户或已预先充值)
funder = w3.eth.accounts[0]

def fund_address(to_addr, amount_wei=Web3.to_wei(1, "ether")):
    tx = {
        "from": funder,
        "to": to_addr,
        "value": amount_wei,
        "gas": 21000,
        "nonce": w3.eth.get_transaction_count(funder),
    }
    tx_hash = w3.eth.send_transaction(tx)
    w3.eth.wait_for_transaction_receipt(tx_hash)

for addr in owners:
    fund_address(addr)
# 部署合约
SimpleMultiSig = w3.eth.contract(abi=abi, bytecode=bytecode)

# Build transaction with deployer = funder
construct_txn = SimpleMultiSig.constructor(owners, threshold).build_transaction({
    "from": funder,
    "nonce": w3.eth.get_transaction_count(funder),
    "gas": GAS,
    "gasPrice": w3.eth.gas_price,
    "chainId": CHAIN_ID
})

tx_hash = w3.eth.send_transaction(construct_txn)
tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
ms_address = tx_receipt.contractAddress
print("MultiSig deployed at:", ms_address)
MultiSig deployed at: 0x8A791620dd6260079BF849Dc5567aDC3F2FdC318
ms_contract = w3.eth.contract(address=ms_address, abi=abi)
# --- 准备一个由多重签名执行的交易 ---
to = w3.to_checksum_address(w3.eth.accounts[1])  # 目标:将资金发送至第二个节点账户
value = Web3.to_wei(0.1, "ether")
data = b""  # 空的参数数据
nonce = ms_contract.functions.nonce().call()
print("合约nonce:", nonce)
合约nonce: 0
# # 计算消息哈希值(与 Solidity 中的 getMessageHash 方法相同)
# Solidity: keccak256(abi.encodePacked(to, value, keccak256(data), nonce))
data_hash = w3.keccak(data)
packed = Web3.solidity_keccak(
    ["address", "uint256", "bytes32", "uint256"],
    [to, value, data_hash, nonce]
)
message_hash = packed  # 32 bytes

# 现在创建以太坊签名消息(与 Solidity 中的 getEthSignedMessageHash 方法相同)
# 我们必须对前缀消息进行签名(使用 eth_sign 或 personal_sign 功能)
message = encode_defunct(message_hash)
# 使用所有者的私钥进行签名(我们有 acct1、acct2、acct3 这三个对象)
sig1 = Account.sign_message(message, private_key=acct1.key)
sig2 = Account.sign_message(message, private_key=acct2.key)
sig3 = Account.sign_message(message, private_key=acct3.key)
# 现在按照地址严格递增的顺序创建签名组合
# 我们必须按地址对签名者进行排序,并按照此顺序将签名组合起来。
sigs = []
pairs = [
    (acct1.address, sig1),
    (acct2.address, sig2),
    (acct3.address, sig3)
]
pairs_sorted = sorted(pairs, key=lambda p: bytes.fromhex(p[0][2:]))  # sort by address bytes
print("Sorted signers:", [p[0] for p in pairs_sorted])
Sorted signers: ['0x1dD2D95820f25a28fd8352671eFcC9324b90Bd3a', '0x796109581b5B339DdCa42c860b4F8dC21f7A0AB7', '0xcD57A2da868DaD6d1A26660C32BFfAFA0eBF9b32']
for addr, sig in pairs_sorted:
    # signature bytes r(32) + s(32) + v(1)
    r = sig.r.to_bytes(32, byteorder="big")
    s = sig.s.to_bytes(32, byteorder="big")
    v = bytes([sig.v])
    sigs.append(r + s + v)

signatures_concatenated = b"".join(sigs)
# 在执行过程中,我们只需要阈值签名。从已排序的列表中选取前 `threshold` 个签名。
signatures_for_submit = signatures_concatenated[:65 * threshold]
# 提交执行交易的调用
tx = ms_contract.functions.executeTransaction(to, value, data, signatures_for_submit).build_transaction({
    "from": funder,
    "nonce": w3.eth.get_transaction_count(funder),
    "gas": GAS,
    "gasPrice": w3.eth.gas_price,
    "chainId": CHAIN_ID
})

tx_hash = w3.eth.send_transaction(tx)
receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
print("Execute tx receipt:", receipt)
Execute tx receipt: AttributeDict({'type': 0, 'status': 0, 'cumulativeGasUsed': 75409, 'logs': [], 'logsBloom': HexBytes('0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'), 'transactionHash': HexBytes('0x05d3535b51dedbe1b217eabd0fe6936a26512c6f4332551bd0ba1286bd288c00'), 'transactionIndex': 0, 'blockHash': HexBytes('0x9e0469bf50dc5a1670bb199811b03abf4bfc5167f7e8fa694df798a3a1cf265f'), 'blockNumber': 11, 'gasUsed': 75409, 'effectiveGasPrice': 1270799468, 'blobGasPrice': 1, 'from': '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', 'to': '0x8A791620dd6260079BF849Dc5567aDC3F2FdC318', 'contractAddress': None})

说明与注意事项(关键点)

  1. 签名格式要一致:上面合约里我们用了 getEthSignedMessageHash(相当于 eth_sign / personal_sign 前缀)。在 Python 用 eth_account.messages.encode_defunct 来创建与之匹配的签名。两边的前缀必须一致,否则签名验证失败。
  2. 签名顺序与防重放:合约要求签名提供者地址是严格递增 (recovered > lastRecovered) 来避免重复使用同一签名或顺序混乱导致的双计数。这是一种常用技巧,也可以用 bitmap 或 usedSignature mapping。
  3. 签名数据的构造:合约对 data 先做了 keccak256(data),以处理可变长度。Python 端必须一样计算。
  4. 阈值(threshold):合约要求 sigCount >= threshold,并在循环里早停到阈值以节省 gas。
  5. 签名长度:每个签名 65 bytes (r=32 | s=32 | v=1)。Python 端要把 r+s+v 串联。
  6. 资金来源:在 demo 中用 funder(节点第一个账户)来发起部署和最终的 executeTransaction 调用;合约会把 ETH 从自己余额转出(合约必须有足够 ETH)。你可以在部署后先给合约转点 ETH(通过 send_transaction 到合约地址)用于支付要转出去的 value。
  7. 本地测试工具:推荐使用 Anvil 或 Ganache/Hardhat,方便快速获取 unlocked accounts / pre-funded accounts,调试时不用签名 tx(或者可以使用私钥直接发送 raw tx)。
Web端数据加密与签名逆向分析:以福建公共资源交易平台为例 在Web应用开发中,数据安全传输是核心需求,通常涉及加密与签名技术。加密技术如AES、RSA等,通过对数据进行编码转换,确保传输过程中不被窃取或篡改,其原理基于复杂的数学算法,实现数据的机密性。签名技术则利用哈希算法(如MD5、SHA256)和密钥,生成唯一标识,用于验证数据完整性和来源真实性,防止中间人攻击。这些技术的价值在于保障用户隐私、防止数据泄露和确保交易安全,广泛应用于金融、电商、政务等敏感场景。本文以福建公共资源交易平台为例,通过逆向分析其前端JavaScript代码,详细拆解了portal-s 阅读详情

相关推荐

B站爬虫实战:手把手教你破解w_rid签名参数(附Python完整代码)

本文详细解析了B站w_rid签名参数的生成机制,并提供完整的Python实现代码。通过JS逆向技术,开发者可以掌握B站评论接口的加密原理,包括密钥获取、混淆算法和签名生成流程,助力高效爬取B站数据。

perl8的博客 1483

使用Python构建简单加密货币钱包-从基础到高级功能

你还可以使用智能合约来创建自定义的代币(Token)。最常见的标准是以太坊上的ERC-20标准,它定义了代币的基本功能和接口。本文详细介绍了如何使用Python构建一个简单的加密货币钱包,包括生成地址、私钥管理、多重签名交易、与智能合约交互等功能。这些基础功能构成了钱包应用的核心,同时也为后续的功能扩展提供了坚实的基础。区块链技术和加密货币仍在快速发展,不断涌现出新的应用场景和技术挑战。作为开发者,掌握钱包开发的基础知识将使你能够更好地适应和应对这些挑战,参与到更复杂、更创新的区块链项目中。

一键难忘的博客 3353

逆向快手Web端扫码登录:除了Python requests,我们还能学到什么?

本文深入解析了快手Web端扫码登录的逆向工程实践,揭示了现代认证体系的设计精髓。通过Python requests分析,探讨了动态签名验证链、令牌接力机制等关键技术,为开发者提供了安全防护与登录方案设计的实用启示。

weixin_30598225的博客 440

区块链交易签名相关知识总结

print(f"原始交易数据: {signed_tx.rawTransaction.hex()}")\text{私钥} \xrightarrow{\text{椭圆曲线乘法}} \text{公钥}:合并多个签名,节省区块空间(例如比特币的Taproot升级)。:限制交易有效期(如Stellar网络)。:如“3/5签名”,需至少3个授权者签署。:包含输入输出、金额、Nonce等字段。:私钥存储在离线设备(如硬件钱包)。:签名者无法否认已签名的交易。:证明交易由私钥持有者发起。:节点用公钥验证签名有效性。

hanzl1的博客 1728

得物App球鞋价格监控爬虫实战:交易快照抓取与智能降价提醒系统

msg = f"📉 球鞋降价提醒!\n商品ID: {product_id}\n原历史最低: ¥{history_lowest}\n现最低成交: ¥{current_lowest}\n降幅: {drop_ratio:.2%}"trade_tab = driver.find_element(By.XPATH, "//span[contains(text(),'成交记录')]")print(f"[{datetime.now()}] {product_id} 监控完成,最低价 {current_lowest}")

2201_76125261的博客 1701

D类功放LC滤波器实战:从Q值0.707到EMI优化的完整设计流程

本文详细解析了D类功放LC滤波器的完整设计流程,从确定截止频率与Q值0.707的理论基础出发,到参数计算、仿真验证及关键元器件选型,并提供了应对EMI超标和过流保护等实际问题的进阶调试策略。文章强调,精准的LC滤波器设计是平衡音质、稳定性与电磁兼容性的关键,尤其需关注电感饱和电流与电容直流偏置等细节。

e4f5g6h7的博客 1036

告别单点故障:用Python实战BLS门限签名,为你的Web3钱包加把‘分布式锁’

本文详细介绍了如何使用Python实现BLS门限签名(Threshold Signature)技术,为Web3钱包提供抗单点故障的安全解决方案。通过密钥分发、分布式签名和签名聚合三个核心步骤,结合实战代码示例,帮助开发者构建更安全、高效的加密钱包系统,同时优化性能并解决工程实践中的关键挑战。

weixin_30572613的博客 339

多模态特征融合方法总结

由于本人的研究是文本、语音和图像三者模态数据的融合,所以针对的是这三种模态的特征融合方法进行总结。 首先,多模态特征融合的方法大体分为三种

华辰烟雨的博客 9万+

Java实现交易所冷钱包系统:架构设计与安全实践

在区块链与数字资产领域,密钥管理是保障资产安全的核心技术。其基本原理是通过密码学算法生成非对称密钥对,其中私钥用于签名授权交易,公钥则生成地址用于接收资产。这一技术价值在于为去中心化金融提供了身份验证与资产控制的数学基础,广泛应用于加密货币存储、数字签名和身份认证等场景。冷钱包作为密钥管理的最高安全实践,通过物理隔离技术将私钥存储于离线环境,结合多重签名与Java工程化实现,为交易所构建起抵御网络攻击的终极防线。本文聚焦于冷钱包系统的架构设计、Java代码实现与安全流程规范,为开发者提供从原理到落地的完整解

weixin_30851867的博客 407

ThingsBoard 3.1.1版本在window本地运行之TB-Gateway服务搭建(三)

TB-gateway服务是TB不可或缺的部分,很多的协议都需要TB-gateway来做分类处理,今天我们就来做TB-Gateway服务搭建。

晚点遇见你,余生都是你! 2474

【ComfyUI】Z-Image 基础文生图 + 单LoRA

本文介绍了一个基于ComfyUI的Z-Image Turbo基础文生图工作流,采用轻量化UNet模型配合Qwen Image文本理解模型与LoRA风格注入,实现从文本到图像的快速生成。工作流结构清晰,包含模型加载、文本编码、采样解码等标准节点,在人物生成、构图稳定性和出图速度方面表现均衡。通过调整Prompt可控制生成内容,适合日常创作、教学演示及扩展进阶应用。

Mr数据杨 928

web3-ethereum-defi完全指南:一站式掌握DeFi交易自动化与数据研究

Web3-Ethereum-Defi(简称`eth_defi`)是一个功能强大的Python库,专为去中心化金融(DeFi)交易自动化、数据研究和系统集成而设计。这个开源工具包支持Uniswap、Aave、Chainlink、USDC等主流协议,为开发者和研究人员提供了完整的Web3交互解决方案。无论你是想构建交易机器人、进行数据分析,还是创建DeFi应用集成,这个库都能为你提供强大的支持。 #

gitblog_00239的博客 488

《网络安全自学教程》- OSI七层模型分层及作用,数据封装与解封过程,数据传输过程。

OSI分哪七层,每层的作用是什么,解释数据在七层模型中是怎样传输的,封包和解封过程,数据包在每一层是怎么封装和解封的。

wangyuxiang946的博客 1万+

探索AI与Web3的融合:Awesome Web3中的LLM与MCP应用完整指南 [特殊字符]

在当今技术快速发展的时代,**AI与Web3的融合**正在重新定义去中心化应用的边界。Awesome Web3项目作为一个精心策划的资源集合,为我们展示了人工智能如何与区块链技术紧密结合,创造出前所未有的创新应用。本文将带您深入了解这个令人兴奋的领域,探索大型语言模型(LLM)和模型上下文协议(MCP)在Web3生态系统中的革命性应用。 [![Awesome Web3项目封面](https://

gitblog_00362的博客 503

2023华为od机试真题【恢复数字序列】C++

2023华为od机试真题【恢复数字序列】C++ 对于一个连续正整数组成的序列,可以将其拼接成一个字符串,再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112,打乱一部分字符后得到90811211,原来的正整数10就被拆成了0和1。现给定一个按如上规则得到的打乱字符的字符串,请将其还原成连续正整数序列,并输出序列中最小的数字. 输入描述

MISAYAONE的博客 5730

第28节:cesium 加载高程数据(含源码+视频)

cesium 加载高程(地形)数据

qq_29384639的博客 1741

Flink Python API 配置详解:从 DataStream 到 Table 的 Configuration 使用与全部 Python Options 说明

本文以 Apache Flink 官方文档《Configuration》为主体,系统讲解 PyFlink(Python API)程序中的配置体系:如何在 Python DataStream API 与 Python Table API 程序中设置参数、如何通过 `Configuration` 对象与 `EnvironmentSettings` 传递配置,并完整梳理 `python.*` 前缀的全部

gitblog_00204的博客 388

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

以太坊状态通道技术:原理、实现与高频交易优化

状态通道作为区块链二层扩容的核心技术,通过将交易移至链下执行、关键环节链上仲裁的混合架构,实现了吞吐量从15TPS到3000+TPS的飞跃。其技术原理基于多重签名托管、状态证明签名和争议期机制,在保持去中心化特性的同时,将微支付延迟压缩至300毫秒级,gas成本降低90%以上。这种设计特别适合DeFi高频交易、NFT实时买卖和链游交互等场景,典型应用包括DEX做市商报价优化(价差缩小60%)和游戏道具秒级交易。Solidity实现需重点处理通道合约结构、ECDSA签名验证和状态序列化,结合EIP-1559和

weixin_34323858的博客 370

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

大麦网API逆向工程深度解析:从签名算法到自动化抢票的完整实现指南

# 大麦网API逆向工程深度解析:从签名算法到自动化抢票的完整实现指南 在演唱会门票"秒空"的时代,掌握API逆向工程技术已成为开发者突破平台限制、实现自动化操作的核心能力。本文将深度剖析大麦网抢票脚本的实现原理,从API接口逆向分析到签名算法破解,提供一套完整的自动化脚本开发指南,帮助技术爱好者和开发者深入理解现代Web应用的安全机制与反爬虫策略。 ## 背景引入:自动化抢票的技术挑战 大

gitblog_00060的博客 1033

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

逆向解析短视频平台a_bogus签名算法:从JS混淆到Python纯算法实现

在Web安全与数据交互领域,接口签名是保障请求合法性、防止未授权访问的核心机制。其原理通常基于密码学哈希函数(如MD5、SHA系列)或自定义加密算法,对请求参数、时间戳等关键信息进行计算,生成唯一标识字符串。这项技术的核心价值在于实现身份验证与数据防篡改,广泛应用于API调用、移动应用及数据采集等场景,是构建安全通信的基石。面对主流平台采用混淆、控制流平坦化等保护手段的a_bogus签名参数,本文通过逆向工程实战,详细拆解其生成逻辑,并完成向Python纯算法实现的迁移,为开发者提供高效、可移植的解决方案。

weixin_30633405的博客 483

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【JS 逆向实战】Python + Node.js 突破 RSA/AES 混合加密与接口动态签名

摘要 本项目是一个Python与Node.js结合的爬虫系统,成功突破"中国观鸟记录中心"的加密接口。技术特点包括: 环境要求:需同时安装Python 3.7+和Node.js 加密破解:通过逆向分析实现RSA请求加密和AES响应解密 核心技术: 使用PyExecJS执行JavaScript解密逻辑 动态生成请求签名(MD5) 维护会话状态(requests.Session) 数据处理:自动采集并清洗观测数据,保存为CSV格式 项目展示了完整的Web逆向流程,从抓包分析到加密算法还原,为

2501_92864729的博客 1164

Paseo 插件开发实战:通过 runAcpProvider 与 AcpTransformer 将 ACP 编码 Agent 接入统一 Provider 边界

本文基于 Paseo 仓库中的 [provider-acp-transformer 示例插件](https://link.gitcode.com/i/9d793c57ec25d74852e04386bd9c661b) 展开,讲解如何通过服务端插件把「已经支持 ACP(Agent Client Protocol)的编码 Agent」注册为 Paseo 的 Provider,并用窄粒度的 Transf

gitblog_00566的博客 432

Python进阶 - 抽象类 定义子类必须实现的方法

Python进阶:抽象类与强制子类实现方法详解 本文深入讲解Python抽象类的核心概念和应用场景,主要包括以下要点: 抽象类本质:作为不能被直接实例化的模板类,通过ABC基类和@abstractmethod装饰器实现 关键特性: 强制子类必须实现特定方法(抽象方法) 可以包含具体实现方法供子类继承 确保派生类遵循统一接口规范 典型应用: 图形绘制系统(Shape类及其子类) 多格式文件处理器(FileProcessor抽象类) 可视化展示:通过Mermaid类图直观呈现继承关系 错误预防:当子类未实现抽象

千淘万漉虽辛苦,吹尽狂沙始到金 8279

Web3.0应用安全渗透测试框架:测试工程师实践指南

Web3.0渗透测试面临去中心化架构、智能合约漏洞和链上链下交互三大核心挑战。测试需采用四阶段框架(PTF4.0):侦察、分析、攻击模拟和持续监控,重点检测重入攻击等智能合约漏洞,使用Mythril等工具进行深度测试。2025年需特别防范跨链桥劫持等新型攻击,测试报告应包含详细PoC和链上存证。随着AI技术发展,渗透测试正进入智能化时代,需建立动态监控体系应对新型攻击模式。

2501_94438352的博客 720

Python实战破解小红书反爬机制:5步实现高效数据采集的完整解决方案

小红书作为国内领先的社交电商平台,其数据价值对于市场分析、竞品研究和内容洞察至关重要。然而,复杂的x-s签名算法、严格的频率限制和浏览器指纹检测等反爬机制,让传统爬虫技术难以持续稳定地获取数据。xhs库正是为解决这一技术挑战而生的专业Python工具包,通过自动化签名处理和智能反爬绕行机制,为开发者提供了一套完整的小红书数据采集解决方案。 ## 🔍 技术挑战:为什么小红书数据采集如此困难?

gitblog_00176的博客 2010
上一篇: 以太坊的P2P网络协议:世界计算机的“神经网络”
下一篇: Web3的存储基石IPFS
voidmort
博客等级 码龄9年 13粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值