EOSIO 代币转账实战:使用 cleos transfer 转移 eosio.token 合约代币
区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载本指南以 EOSIO 开源智能合约平台本仓库 eo/eos中cleos客户端的transfer子命令为核心完整演示如何将eosio.token合约发行的代币如SYS从一个账户转移到另一个账户并深入解析cleos transfer在 programs/cleos/main.cpp 中的底层实现原理、全部命令行参数以及相关测试用例。阅读本文后你将掌握转账命令的标准写法、参数语义、权限模型与常见错误规避方法。前置条件在执行转账操作之前需要确认以下环境与知识均已就绪已安装当前仓库支持的cleos客户端。cleos随 EOSIO 软件一同构建安装构建与安装方式可参考 docs/00_install/index.md。目标网络你所连接的链上已部署eosio.token合约。只有合约部署后代币的transferaction 才可被调用。发送方账户下文示例中的alice持有足够数量的待转账代币且已解锁钱包并导入对应私钥cleos wallet unlock/cleos wallet import。理解以下概念交易transaction一次提交到链上的原子操作集合转账动作被封装在交易中执行。转账不可逆代币转账一旦被区块确认并达到不可逆状态就无法回滚或撤销发送前务必核对收款账户与金额。核心命令cleos transfercleos transfer是cleos提供的标准代币转账子命令其官方功能描述为 Transfer tokens from account to account从账户向账户转移代币详见 docs/02_cleos/03_command-reference/transfer.md。基本语法cleos transfer sender recipient amount SYMBOL memo -p senderactive其中四个位置参数依次为参数说明sender转出代币的账户名recipient接收代币的账户名amount转账数量格式为数量 符号如0.0001 SYS必须用引号包裹memo随交易附带的消息/备注可选但推荐保留便于对账标准操作示例以下命令演示从账户alice向账户bob转账0.0001 SYS并附带备注Hodl!cleos transfer alice bob 0.0001 SYS Hodl! -p aliceactive其中alice 转出代币的账户bob 接收代币的账户0.0001 SYS 发送的SYS代币数量Hodl! 随交易附带的备注memo-p aliceactive 以alice账户的active权限为交易授权签名默认为senderactive此处显式指定更清晰。示例输出命令执行成功后的典型输出如下不同网络与版本可能略有差异此处的输出为文档原始示意其中 quantity 展示为25.0000 SYSexecuted transaction: 800835f28659d405748f4ac0ec9e327335eae579a0d8e8ef6330e78c9ee1b67c 128 bytes 1073 us # eosio.token eosio.token::transfer {from:alice,to:bob,quantity:25.0000 SYS,memo:m} # alice eosio.token::transfer {from:alice,to:bob,quantity:25.0000 SYS,memo:m} # bob eosio.token::transfer {from:alice,to:bob,quantity:25.0000 SYS,memo:m}输出解读executed transaction: 交易ID交易已在链上执行成功并给出交易哈希随后的每一行对应链上执行时打印的 action 轨迹第一行是eosio.token合约自身执行的transferaction接下来是发送方alice与接收方bob因收到通知notify而打印的相同 action 数据。全部命令行参数详解除了位置参数cleos transfer还支持以下选项与 docs/02_cleos/03_command-reference/transfer.md 一致它们在 programs/cleos/main.cpp 中以 CLI11 定义选项含义与默认值-c, --contract控制该代币的合约账户名默认eosio.token。可指定其他实现了相同transfer接口的合约--pay-ram-to-open由发送方支付 RAM为接收方打开代币余额行当接收方尚无该代币的余额记录时使用-x, --expiration交易过期时间秒默认 30 秒-f, --force-unique强制交易唯一。会消耗额外带宽防止误发相同交易当 memo 为空时自动在 memo 中注入随机 nonce见下文源码解析-s, --skip-sign跳过签名不使用解锁钱包中的密钥签名-j, --json以 JSON 格式打印结果--json-file将结果以 JSON 格式保存到文件-d, --dont-broadcast不广播交易到网络仅打印到 stdout--return-packed与--dont-broadcast配合获取打包后的交易-r, --ref-block指定用于 TAPOSTransaction as Proof-of-Stake的参考区块号或区块 ID--use-old-rpc使用旧版 RPCpush_transaction而非新版send_transaction-p, --permission授权交易使用的账户权限级别默认senderactive--max-cpu-usage-ms交易执行的 CPU 用量上限毫秒默认 0 表示不限--max-net-usage交易的网络带宽用量上限字节默认 0 表示不限--delay-sec延迟交易秒数默认 0 秒简化数量参数当省略符号时cleos会按如下规则处理源码to_asset逻辑见下文cleos transfer inita tester 1000即省略符号直接写数量。此时cleos会先向链上查询eosio.token合约中该符号的精度信息再对数量做精度对齐不足精度的自动补齐小数位。源码级解析cleos transfer 是如何工作的1. 子命令与参数定义在 programs/cleos/main.cpp 中transfer子命令被定义为string con eosio.token; // 默认代币合约 ... auto transfer app.add_subcommand(transfer, localized(Transfer tokens from account to account)); transfer-add_option(sender, sender, localized(The account sending tokens))-required(); transfer-add_option(recipient, recipient, localized(The account receiving tokens))-required(); transfer-add_option(amount, amount, localized(The amount of tokens to send))-required(); transfer-add_option(memo, memo, localized(The memo for the transfer)); transfer-add_option(--contract,-c, con, localized(The contract that controls the token)); transfer-add_flag(--pay-ram-to-open, pay_ram, localized(Pay RAM to open recipients token balance row)); add_standard_transaction_options_plus_signing(transfer, senderactive);从源码结构可以确认sender、recipient、amount为必填参数memo可选默认合约名为eosio.token默认授权为senderactive。2. 数量解析与精度对齐to_asset执行回调中先调用to_asset将金额字符串解析为资产对象见 programs/cleos/main.cppasset to_asset( account_name code, const string s ) { static map pairaccount_name, eosio::chain::symbol_code, eosio::chain::symbol cache; auto a asset::from_string( s ); eosio::chain::symbol_code sym a.get_symbol().to_symbol_code(); auto it cache.find( make_pair(code, sym) ); ... auto json call(get_currency_stats_func, ...); // 查询合约的货币统计get_currency_stats ... if ( a.decimals() expected_symbol.decimals() ) { auto factor expected_symbol.precision() / a.precision(); a asset( a.get_amount() * factor, expected_symbol ); } else if ( a.decimals() expected_symbol.decimals() ) { EOS_THROW(symbol_type_exception, Too many decimal digits in ${a}, only ${d} supported, ...); } return a; }要点cleos会通过 RPC 调用合约的get_currency_stats接口查询符号对应的最大供应量从而获得该符号的官方精度用户给出的金额小数位数少于官方精度时自动补齐如1000→1000.0000 SYS小数位数超过官方精度时直接抛出symbol_type_exception错误拒绝执行。这正是转账时金额精度必须合法的底层保障。3. 构造 transfer actioncreate_transfer随后调用create_transfer构造链上 action见 programs/cleos/main.cppchain::action create_transfer(const string contract, const name sender, const name recipient, asset amount, const string memo ) { auto transfer fc::mutable_variant_object (from, sender) (to, recipient) (quantity, amount) (memo, memo); return action { get_account_permissions(tx_permission, {sender, config::active_name}), name(contract), transfer_n, variant_to_bin( name(contract), transfer_n, transfer ) }; }即向目标合约默认eosio.token发出transferaction数据结构为{from, to, quantity, memo}授权级别取自senderactive。4. --pay-ram-to-open 的底层行为在回调中programs/cleos/main.cpp如果指定了--pay-ram-to-opencleos会先构造并发送一个openaction再发送transferif (!pay_ram) { send_actions( { transfer }, signing_keys_opt.get_keys()); } else { auto open_ create_open(con, name(recipient), transfer_amount.get_symbol(), name(sender)); send_actions( { open_, transfer }, signing_keys_opt.get_keys()); }create_openprograms/cleos/main.cpp构造{owner, symbol, ram_payer}结构ram_payer为发送方sender。这意味着当接收方账户从未持有过该代币其余额行尚未创建时发送方可以主动承担 RAM 费用帮对方开户从而避免转账因接收方余额表不存在而失败。5. 强制唯一--force-unique的实现当指定-f/--force-unique且 memo 为空时cleos会自动生成随机字符串注入 memo作为交易的 nonceif (tx_force_unique memo.size() 0) { memo generate_nonce_string(); tx_force_unique false; }这保证了两次相同的转账也会因 memo 不同而生成不同交易 ID防止重复广播同一笔交易代价是额外带宽消耗。结合测试用例理解转账语义仓库的单元测试 unittests/eosio.token_tests.cpp 覆盖了eosio.token合约的转账语义可帮助理解真实链上的行为正常转账transfer( alice_n, bob_n, asset::from_string(300 CERO), hola )验证账户间成功转出、余额更新超额转账向余额不足的账户发起701 CERO转账会被拒绝非法金额转账-1000 CERO负数同样会被合约拒绝。这些用例印证了虽然cleos transfer负责构造并广播交易但金额校验余额充足、数量为正、精度正确最终由eosio.token合约在链上强制执行cleos端只是做了前置的精度对齐。常见问题与注意事项金额必须带符号并用引号包裹0.0001 SYS中的符号是必须的且cleos会校验小数精度省略符号时按默认精度补齐建议显式书写符号避免歧义。精度超限会直接报错若金额小数位超过合约定义精度cleos抛出Too many decimal digits ... only d supported异常。转账不可逆区块确认后无法撤销务必核对recipient与金额memo建议保留原始信息便于审计对账。接收方无余额记录时可先由发送方用--pay-ram-to-open帮助对方开户或提示接收方先通过其他途径持有该代币。授权级别默认使用senderactive签名若使用自定义权限或合约账户发送务必用-p accountpermission显式指定。代币不一定是 SYS-c/--contract可指定控制该代币的其他合约只要是实现了标准transfer接口的合约均可按本文流程转账。总结通过cleos transfer用户可以便捷地将eosio.token合约发行的代币在账户间转移。本文从命令语法、参数选项、示例输出入手并深入到 programs/cleos/main.cpp 的to_asset、create_transfer、create_open等实现解释了金额精度对齐、默认授权、--pay-ram-to-open开户与--force-unique防重等底层机制同时结合 unittests/eosio.token_tests.cpp 说明了链上校验语义。掌握上述内容后即可在实际网络上安全、正确地完成代币转账操作。赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐Archon archon-post-review-to-pr 详解将代码审查结果自动发布为 GitHub PR 评论的确定性 Agent 命令模板Archon archon post review to pr 详解将代码审查结果自动发布为 GitHub PR 评论的确定性 Agent 命令模板 本文以区块链EOSIO cleos get currency balance 命令详解查询账户代币余额的完整指南EOSIO cleos get currency balance 命令详解查询账户代币余额的完整指南 导读 cleos get currency balanc区块链WeChatMsg 完整指南3 步免费导出微信聊天记录HTML、Word、CSV 永久保存WeChatMsg 完整指南3 步免费导出微信聊天记录HTML、Word、CSV 永久保存 刚重装完系统想翻去年和某个人的聊天新微信里只剩最近几条记录。区块链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PHPStan 错误码 offsetAccess.noDim 完全指南:理解并修复「空维度读取」问题

PHPStan 错误码 offsetAccess.noDim 完全指南:理解并修复「空维度读取」问题

开发工具代码质量静态分析 【免费下载链接】phpstan PHP Static Analysis Tool - discover bugs in your code without running it! 项目地址: https://gitcode.com/gh_mirrors/ph/phpstan 点击查看 免费下载 导读 offsetAccess.noDim 是 PHPStan 报告的一类数组偏…

2026/9/24 17:01:48 阅读更多 →
FX3U伺服回原点三大实战方法详解

FX3U伺服回原点三大实战方法详解

简介:本资源是一份面向自动化工程师与PLC初学者的三菱FX3U系列PLC伺服回原点实战指南,聚焦运动控制中关键的定位起点建立问题,系统解析三种工业现场常用回原策略及其PLC编程实现。文档为单个1.53MB的Word文件(.docx)&a…

2026/9/24 17:01:48 阅读更多 →
Ludwig 中的 entmax:从 sparsemax 到可学习稀疏性的 α-entmax 概率映射与损失函数实战指南

Ludwig 中的 entmax:从 sparsemax 到可学习稀疏性的 α-entmax 概率映射与损失函数实战指南

Ludwig 中的 entmax:从 sparsemax 到可学习稀疏性的 α-entmax 概率映射与损失函数实战指南 【免费下载链接】ludwig Low-code framework for building custom LLMs, neural networks, and other AI models 项目地址: https://gitcode.com/gh_mirrors/lu/ludwig …

2026/9/24 17:01:02 阅读更多 →

最新新闻

RunAnywhere Kotlin SDK 之 runanywhere-onnx:Android 端侧 STT/TTS/VAD 后端的安装、注册与语音 API 实战指南

RunAnywhere Kotlin SDK 之 runanywhere-onnx:Android 端侧 STT/TTS/VAD 后端的安装、注册与语音 API 实战指南

AI模型推理服务推理引擎本地部署多模态 【免费下载链接】runanywhere-sdks Production ready toolkit to run AI locally 项目地址: https://gitcode.com/gh_mirrors/ru/runanywhere-sdks 点击查看 免费下载 runanywhere-onnx 是 RunAnywhere Kotlin SDK 的可选语音…

2026/9/24 17:01:12 阅读更多 →
Prisma 数据导入指南:`prisma import` 命令、NDF 格式与导入 API 实战

Prisma 数据导入指南:`prisma import` 命令、NDF 格式与导入 API 实战

后端数据库GraphQL 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 点击查看 免费下载 导读 prisma import 是 …

2026/9/24 17:01:12 阅读更多 →
抖音无水印下载工具 douyin-downloader:从单条视频到主页批量采集的完整指南

抖音无水印下载工具 douyin-downloader:从单条视频到主页批量采集的完整指南

抖音无水印下载工具 douyin-downloader:从单条视频到主页批量采集的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and b…

2026/9/24 17:01:12 阅读更多 →
QuantsPlaybook量化研报复现指南:10分钟跑通

QuantsPlaybook量化研报复现指南:10分钟跑通

QuantsPlaybook量化研报复现指南:10分钟跑通 【免费下载链接】QuantsPlaybook 量化研究-券商金工研报复现 项目地址: https://gitcode.com/GitHub_Trending/qu/QuantsPlaybook QuantsPlaybook用Python复现了100份券商金工研报:25个择时策略、22个…

2026/9/24 17:01:12 阅读更多 →
easytrader 远端服务模式实战:交易服务端与量化策略端分离部署指南

easytrader 远端服务模式实战:交易服务端与量化策略端分离部署指南

easytrader 远端服务模式实战:交易服务端与量化策略端分离部署指南 【免费下载链接】easytrader 提供同花顺客户端/miniqmt/雪球的股票量化交易,支持跟踪 joinquant /ricequant 模拟交易 和 实盘雪球组合 项目地址: https://gitcode.com/gh_mirrors/ea…

2026/9/24 17:01:11 阅读更多 →
templ ADR 0001 解析:如何在文本行内书写 `@Component()` 组件表达式

templ ADR 0001 解析:如何在文本行内书写 `@Component()` 组件表达式

开发工具代码生成后端 【免费下载链接】templ A language for writing HTML user interfaces in Go. 项目地址: https://gitcode.com/gh_mirrors/te/templ 点击查看 免费下载 符号在 templ 模板语言中用于调用组件表达式(templ element expression&…

2026/9/24 17:00:11 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →