热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词专为区块链开发者和学习者设计,提供精准的区块链术语定义服务。通过结构化解析框架,深入阐释术语的核心概念、技术原理、应用场景及关联概念,确保内容权威准确、逻辑清晰。适用于技术文档编写、教育培训、项目开发等多种场景,帮助用户快速掌握区块链专业术语的内涵与外延,提升技术理解与沟通效率。
interface ICrossDomainMessenger {
function sendMessage(address target, bytes calldata message, uint32 gasLimit) external;
event SentMessage(address indexed target, address sender, bytes message);
}
// L2 合约:调用 L1 合约
contract L2Caller {
address constant L2_MESSENGER = 0x4200000000000000000000000000000000000007; // 例:OP Stack 默认地址
function callL1(address l1Target, bytes calldata data) external {
ICrossDomainMessenger(L2_MESSENGER).sendMessage(l1Target, data, 1_000_000);
}
}
contract Rollup {
struct Batch { bytes32 prevStateRoot; bytes blobCommitment; bytes32 postStateRoot; }
uint256 public challengePeriod = 7 days;
mapping(uint256 => Batch) public batches;
mapping(uint256 => uint256) public batchTimestamp;
mapping(uint256 => bool) public challenged;
function submitBatch(uint256 id, Batch calldata b) external payable {
require(id == 0 || batches[id-1].postStateRoot == b.prevStateRoot, "bad link");
batches[id] = b;
batchTimestamp[id] = block.timestamp;
}
function challenge(uint256 id, bytes calldata proof) external {
require(block.timestamp < batchTimestamp[id] + challengePeriod, "finalized");
// 触发交互式争议游戏(链下多轮,链上最终一步)
challenged[id] = true;
}
function resolve(uint256 id, bool valid) external {
require(challenged[id], "no dispute");
if (!valid) {
// 回滚与惩罚(省略)
delete batches[id];
}
challenged[id] = false;
}
function finalized(uint256 id) public view returns (bool) {
return block.timestamp >= batchTimestamp[id] + challengePeriod && !challenged[id];
}
}
{
"l1ChainId": 1,
"l2ChainId": 8453,
"batchInboxAddress": "0xYourBatchInbox",
"systemConfig": {
"sequencer": "0xSequencer",
"batcher": "0xBatchSubmitter",
"gasLimit": "0x1c9c380",
"overhead": "0x0",
"scaler": "0x0"
},
"rollup": {
"challengePeriodSeconds": 604800,
"l2OutputOracle": "0xL2OutputOracle",
"optimismPortal": "0xOptimismPortal"
},
"da": {
"mode": "blob-4844",
"maxBlobPerBatch": 6
}
}
备注与实践要点
template Multiplier() {
signal input a; // 私有输入
signal input b; // 私有输入
signal output c; // 公开输出
c <== a * b;
}
component main = Multiplier();
说明与建议:
代码示例(Solidity:极简 4337 账户,演示核心接口,非生产可用)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IEntryPoint {
function depositTo(address account) external payable;
}
struct UserOperation {
address sender;
uint256 nonce;
bytes initCode;
bytes callData;
uint256 callGasLimit;
uint256 verificationGasLimit;
uint256 preVerificationGas;
uint256 maxFeePerGas;
uint256 maxPriorityFeePerGas;
bytes paymasterAndData;
bytes signature;
}
library ECDSA {
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
require(signature.length == 65, "bad sig len");
bytes32 r; bytes32 s; uint8 v;
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
require(v == 27 || v == 28, "bad v");
return ecrecover(hash, v, r, s);
}
}
contract SimpleAAAccount {
using ECDSA for bytes32;
IEntryPoint public immutable entryPoint;
address public owner;
uint256 public nonce; // 简化:单一 nonce
modifier onlyEntryPoint() {
require(msg.sender == address(entryPoint), "only EntryPoint");
_;
}
constructor(address _entryPoint, address _owner) payable {
entryPoint = IEntryPoint(_entryPoint);
owner = _owner;
}
// 4337 调用:验证签名/nonce,并在需要时补足资金
// 返回值 validationData:此处返回 0(表示无限期有效,无聚合器)。生产中应包含有效期/链ID域分离等。
function validateUserOp(
UserOperation calldata userOp,
bytes32 userOpHash,
uint256 missingAccountFunds
) external onlyEntryPoint returns (uint256 validationData) {
// 1) 验证 sender/nonce
require(userOp.sender == address(this), "wrong sender");
require(userOp.nonce == nonce, "bad nonce");
// 2) 验证签名(示例使用 ECDSA 与 EIP-191 前缀)
address sigAddr = userOpHash.toEthSignedMessageHash().recover(userOp.signature);
require(sigAddr == owner, "bad signature");
// 3) 递增 nonce
unchecked { nonce++; }
// 4) 如果 EntryPoint 指示账户需要补足资金,则充值到 EntryPoint
if (missingAccountFunds > 0) {
entryPoint.depositTo{value: missingAccountFunds}(address(this));
}
return 0;
}
// 执行目标调用,仅允许通过 EntryPoint 调用(即 4337 执行阶段)
function execute(address target, uint256 value, bytes calldata data) external onlyEntryPoint {
(bool ok, bytes memory ret) = target.call{value: value}(data);
require(ok, string(abi.encodePacked("execute failed: ", ret)));
}
// 可选:批量执行
function executeBatch(address[] calldata targets, bytes[] calldata datas) external onlyEntryPoint {
require(targets.length == datas.length, "len mismatch");
for (uint256 i = 0; i < targets.length; i++) {
(bool ok, bytes memory ret) = targets[i].call(datas[i]);
require(ok, string(abi.encodePacked("batch item failed: ", ret)));
}
}
receive() external payable {}
}
生产要点补充:
配置示例(以 ERC-4337 客户端为例)
操作示例(构造并发送 UserOperation,TypeScript 伪代码)
import { ethers } from "ethers";
// bundler 的 RPC 端点(非标准以太坊节点),由你自建或第三方提供
const BUNDLER_RPC = "https://bundler.example.org";
// 账户相关参数
const entryPoint = "0xEntryPoint...";
const sender = "0xYourSmartAccount"; // 若未部署,sender 为未来地址,需填写 initCode
const chainId = 1; // 主网示例
// 1) 构造待签名的 UserOperation(示例:调用某 ERC20 转账)
const userOp = {
sender,
nonce: "0x0",
initCode: "0x", // 未部署时填工厂合约 + calldata
callData: "0x...", // encodeWithSelector(account.execute, token, 0, transferData)
callGasLimit: "0x0", // 先置 0,由 bundler 估算
verificationGasLimit: "0x0",
preVerificationGas: "0x0",
maxFeePerGas: "0x0",
maxPriorityFeePerGas: "0x0",
paymasterAndData: "0x",
signature: "0x" // 先留空用于计算 hash
};
// 2) 请求 bundler 预估 gas
const estimate = await fetch(BUNDLER_RPC, {
method: "POST",
headers: {"content-type": "application/json"},
body: JSON.stringify({
id: 1,
jsonrpc: "2.0",
method: "eth_estimateUserOperationGas",
params: [ userOp, entryPoint ],
})
}).then(r => r.json());
const filled = { ...userOp, ...estimate.result };
// 3) 计算 userOpHash(由本地工具或 SDK 按 4337 规范打包并加入链 ID、EntryPoint)
// 这里假设你有一个工具函数 getUserOpHash(userOp, entryPoint, chainId)
const userOpHash = getUserOpHash(filled, entryPoint, chainId);
// 4) 使用账户支持的签名方案签名(示例为 ECDSA)
const wallet = new ethers.Wallet(process.env.PRIV_KEY!);
const signature = await wallet.signMessage(ethers.getBytes(userOpHash));
// 5) 发送 UserOperation
const sendRes = await fetch(BUNDLER_RPC, {
method: "POST",
headers: {"content-type": "application/json"},
body: JSON.stringify({
id: 2,
jsonrpc: "2.0",
method: "eth_sendUserOperation",
params: [ { ...filled, signature }, entryPoint ],
})
}).then(r => r.json());
const uoHash = sendRes.result;
// 6) 轮询回执
const receipt = await fetch(BUNDLER_RPC, {
method: "POST",
headers: {"content-type": "application/json"},
body: JSON.stringify({
id: 3,
jsonrpc: "2.0",
method: "eth_getUserOperationReceipt",
params: [ uoHash ],
})
}).then(r => r.json());
console.log(receipt.result);
Paymaster 骨架(Solidity 片段,演示结构化校验)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IEntryPointPM {
function balanceOf(address account) external view returns (uint256);
function depositTo(address account) external payable;
}
interface IPaymaster {
function validatePaymasterUserOp(
bytes calldata userOp,
bytes32 userOpHash,
uint256 maxCost
) external returns (bytes memory context, uint256 validationData);
function postOp(
uint8 mode, // PostOpMode
bytes calldata context,
uint256 actualGasCost
) external;
}
contract SimplePaymaster {
IEntryPointPM public immutable entryPoint;
address public owner;
mapping(address => bool) public dappWhitelist;
uint256 public perUserDailyQuota;
modifier onlyOwner() { require(msg.sender == owner, "only owner"); _; }
constructor(address _entryPoint) {
entryPoint = IEntryPointPM(_entryPoint);
owner = msg.sender;
perUserDailyQuota = 1e18; // 示例额度
}
function validatePaymasterUserOp(
bytes calldata /*userOp*/,
bytes32 /*userOpHash*/,
uint256 /*maxCost*/
) external returns (bytes memory context, uint256 validationData) {
require(msg.sender == address(entryPoint), "only EntryPoint");
// 在此解析 userOp,做白名单/时间/额度检查(略)
// 返回 context 以便 postOp 结算
return (abi.encode(msg.sender), 0); // validationData=0 表示有效
}
function postOp(
uint8 /*mode*/,
bytes calldata /*context*/,
uint256 /*actualGasCost*/
) external {
require(msg.sender == address(entryPoint), "only EntryPoint");
// 在此结算赞助成本、记账或从金库扣款(略)
}
receive() external payable {}
}
开发与安全清单(项目落地要点)
结论
让区块链相关岗位(研发、产品、教育、市场、运营)以最低学习门槛,快速产出权威、清晰、可直接落地的术语解析内容,从而:
快速生成术语定义与工作机制说明,补齐技术文档与评审材料,统一代码注释与命名口径。
梳理关键概念与差异点,补充操作示例与潜在风险说明,产出培训手册与审计前置材料。
一键产出白皮书术语章节与场景解读,对齐跨团队语言,支持路演答辩的概念问答准备。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
半价获取高级提示词-优惠即将到期