NEO常见问题与解答

NEO官网技术文档站的“常见的问题与解答”页面,整理罗列了很多大家经常问到的问题,以及对应问题的解答,分门别类,清晰明了。

一般问题

1. NEO 是什么?

NEO 是利用区块链技术和数字身份进行资产数字化,利用智能合约对数字资产进行自动化管理,实现“智能经济” 的一种分布式网络。NEO 网络中内置了两种通证,管理通证 NEO 和燃料通证 GAS。

2. NEO 有哪些开发社区?

NEO 非常重视社区的发展,拥有庞大的全球开发者社区,长期以来为 NEO 的开发提供支持,目前代表性的社区有:

* CoZ ,NEO 生态最早的开发者社区:https://github.com/CityOfZion

* NEL ,NEO 生态首个中文开发者社区:https://github.com/NewEconoLab

* NeoResearch ,南美开发者社区:https://github.com/NeoResearch

* NSPCC ,俄罗斯圣彼得堡开发者社区:https://www.nspcc.ru/en/

* KeyMakers ,NEO 日本社区:https://github.com/keymakers

3. 什么是 GAS?如何提取 GAS?

GAS 代表了 NEO 区块链的使用权,NEO 网络中的资产发行以及智能合约的运行和存储需要花费一定量的 GAS。GAS 初期为 0,会随着新区快的生成而产生。只要获得 NEO,GAS 便会在系统中按照算法自动生成。GAS 有两种状态,可提取和不可提取。当账户中的 NEO 花费后(即转出),其产生的 GAS 会转变成可提取状态。NEO 持有人可以在任意时间发起一笔认领交易,将这些可提取的 GAS 认领到NEO 的地址上。

4. 是否可以通过给自己转账将 GAS 变为可提取状态?

可以。如果钱包里只有一个地址也可以。

5. Mac 用户如何提取 GAS? 

Mac 用户可以使用 NEON 钱包提取 Gas (以及转账NEO/GAS)。点击 这里 下载钱包。(https://github.com/CityOfZion/neon-wallet/releases

6. 我需要拥有多少个 NEO 才能获得 GAS?

NEO 的最小单位为 1 且不能分割。GAS 的最小单位为 0.00000001。只要拥有至少一个 NEO 就会自动产生 GAS 了。你可以使用 GAS 计算器计算 X 个 NEO 可以产生多少个 GAS,例如 https://neotogas.com/

7. NEO 采用什么共识机制? 

NEO 使用一种改进的拜占庭容错机制 (dBFT),可以对由 ? 个共识节点组成的共识系统,提供 ? = ?(??1) / 3 ? 的容错能力。在这个机制当中,存在两种节点:记账节点和普通节点。普通节点基于持有NEO 的比例来投票选出记账节点,当需要通过一项共识时,在这些记账节点中随机推选出一名议长拟定方案,然后由其他记账节点根据拜占庭容错算法进行投票,如果大于等于 2/3 的节点同意发言人方案,则共识达成;否则,重新推选议长,重复投票过程。

8. 如何成为 NEO 的共识节点? 成为共识节点有什么激励吗?

NEO的共识节点由NEO持有者投票选出。详细信息可参考 这里 。(https://neo-ngd.github.io/reference/%E5%A6%82%E4%BD%95%E6%88%90%E4%B8%BANEO%E5%85%B1%E8%AF%86%E8%8A%82%E7%82%B9.html

9. 有哪些 NEO 的区块链浏览器可以使用?

您可以访问 http://ndapp.org/,在Explorer页签下选择所需要的区块链浏览器使用。

10. 如何查看我的交易状态 ? 

可以使用任意 NEO 区块链浏览器查看,例如https://neoscan.io/

11. NEO 是否有类似 ERC-20 的标准?

有的,请参见 NEO 的 NEP-5 标准。(https://github.com/neo-project/proposals/blob/master/nep-5.mediawiki

12. 普通资产和 NEP-5 资产的区别是什么?

NEO 中主要有两种资产,一种是全局资产,例如:NEO、GAS 等,使用 UTXO 模型来管理资产。另一种是合约资产,例如 NEP-5 类型的资产,使用BALANCE 模型来管理资产。NEO 和 GAS 是 UTXO 资产,直接可以进行交易。NEP-5 是合约资产,利用合约的性质进行调用从而交易。使用 NEO-GUI 可以注册与发行新的 UTXO 资产,而要发行 NEP-5 资产,需要编写智能合约。

13. 如何在 NEO-CLI 中查看 NEP-5 资产?

使用 NEO-CLI 中的 list asset 只能显示 UTXO 资产,想要看到 NEP-5 资产,需要调用 API getbalance 。

14. NEP-5 和 NEP-6 区别是什么?

NEP-5 是一种通证标准,是针对在 NEO 的智能合约中发布通证的规范。而 NEP-6 是一种钱包标准,包括钱包的格式,里面参数的定义,钱包地址的创建规则等。NEP-6 标准适用于现在的几个版本,包括2.7.6。NEO 客户端支持两种格式的钱包,一种是sqlite 钱包(格式为 .db3),另一种是 NEP-6 钱包(格式为 .json)。考虑到处理速度,强烈建议交易所使用 sqlite 钱包。

15. NEO 可以像比特币一样保存吗,我担心存储安全

是的。如果你持有 NEO,你将始终在链上拥有。离线存储私钥将保证你的资产安全且无法触及。

16. NEO 钱包之间是否有转账费用?

目前转账 NEO 或 GAS 都没有额外费用。未来可能会收取。

17. NEO 钱包和交易所之间是否有转账费用?

这取决于交易所自身规定。目前 NEO 系统没有转账费用,但是从交易所转出资产时,交易所可能需要收费。

18. 将 NEO 存放在交易所,我是否还能获取 GAS?

这取决于交易所自身规定。有的交易所如 Binance 会发放 GAS 给用户,而有的交易所如 Bittrex 则自己保留 GAS 。如果你要保证自己收到 GAS,请将你的NEO 转到私人钱包并手动提取 GAS。

19. 我从 Bittrex 提取了 NEO,但交易所保留了0.9750 个 NEO 我无法将其取出,因为需要最少 1 个NEO 的手续费。那这点余额可以充值,持有或卖出吗?

你在交易所持有的代币并不是实际的 NEO 数。这就是为什么你可以在交易所拥有 0.97 个 NEO,而钱包不可以。NEO 是不可分割的,所以你也不可能拥有1.01 个 NEO, 它会被折算为 1 个 NEO。如果你尝试转出 0.9750 个 NEO,Bittrex 会发送 0 资产。因此,你只能先保留在交易所,以后再卖,或者购买额外的NEO,使你的 NEO 余额大于必须的费用 1. 

客户端与钱包

20. 为什么使用 NEO-GUI 转账后没有看到资产变化?

在 NEO-GUI 中点击 “交易记录” 查看该笔交易是否已确认,如果已确认,查看你的客户端是否已同步到最高区块高度以及重建钱包索引。

21. 同步钱包需要多久?

* NEO-GUI 钱包 : 可以下载 离线包 加快同步速度。(https://sync.ngd.network/) 你可以在下载页面了解每个离线包预计的同步时间。如果从区块高度 0 开始同步,即之前从未同步过,将需要好几个小时。

* NEON 钱包 : 这是一个轻钱包,无需下载整个区块链数据。所同步速度会很快。

22. 轻钱包(如 NEON)与 NEO-GUI 钱包的区别是什么?

NEO-GUI 需要下载整个区块链数据到你的电脑,而轻钱包使用 API 与区块链交互,仅需少量存储空间即可在区块链上进行交易。

23. 为什么下载了离线同步包后没有加速同步速度?

请参考 快速同步区块 ,并确认:(https://docs.neo.org/docs/zh-cn/node/syncblocks.html

* 您下载了正确的离线包

* 下载的压缩包文件( chain.0.acc.zip 或chain.xxx.acc.zip) 直接放置到了客户端 NEO-CLI 或NEO-GUI 根目录下

* 您没有修改离线包文件名

* 您已安装了 ImportBlocks 插件(https://github.com/neo-project/neo-plugins/releases/download/v2.9.2/ImportBlocks.zip

24.如何确认客户端已经完全同步?

使用区块链浏览器查看最近区块高度,然后查看您客户端中的钱包高度,如果高度一样,说明客户端已完全同步。

25. 如何做观察钱包(watch only)?

可以在 NEO-GUI 中新建一个地址,然后右键导入监视地址,输入需要监视的地址, 然后就能在交易记录里面看到每一笔交易信息。导入后需要重建钱包索引。

26. 是否可以在一次交易中给多个地址进行转账?

可以。请参考交易 。 (https://docs.neo.org/docs/zh-cn/node/gui/transc.html) 

27. 主网节点部署机器的配置要求是什么?

运行节点客户端的机器需要配置双核 CPU,8G 内存,以及最低 100G 以上的固态硬盘,硬盘需根据实际需要扩容,防止 inode 溢出。

28. NEO-CLI 是否有后台启动方式? 

可以制作一些脚本,比如在 Windows 上创建一个记事本文件,输入 dotnet neo-cli.dll /rpc 然后保存为.cmd 文件或者在 linux 上使用 screen 命令。

29. 为什么我钱包里的 NEO 不见了?

1. 多数时候,问题出在钱包上。为了确保你的 NEO 是安全的,最好在 NEO 区块链浏览器上查看余额,如https://neoscan.io/ 。

2. 检查你的钱包是否完全同步。如果已完成同步而问题仍然存在,进行以下操作:

    * NEO-GUI 钱包 :重建钱包索引

    * 轻钱包,如 NEON :刷新钱包

30. 为什么我向钱包转账了 NEO/GAS,却没有看到到账?

1. 请先与你转账的交易所确认交易成功。如果没问题,继续步骤 2:

2. 在区块链浏览器上查看你的交易 / 账户的状态:

    * 如果已经产生交易 ID 并且可以在区块浏览器查看到,说明交易成功,资产已发送到你的账户。如果钱包没有显示正确的余额,可能是钱包没有完全同步。请参考前面问题进行确认。

    * 如果无法在区块链浏览器上查看到交易,说明交易未完成,请联系资产发送方解决。

31. 为什么我调用 RPC 方法 invoke 时,返回结果是错误的?

这是个已知问题。请使用替代方法invokefunction。NEO3 会弃用 invoke 。

开发相关

32. 如何申请测试币? 

你可以在 NGD faucet  (https://neowish.ngd.network/)上每天自动领取最多 1000 个 GAS 和 1000 个 NEO。如果需要更多测试币,可以访问 https://neo.org/testcoin/apply 并填写申请表单。如果申请成功,你将在三到五个工作日内收到通知。

33. 有哪些方法可以搭建私链:

要搭建私链,有以下方法可供选择:

* 单节点模式快速搭建 (https://docs.neo.org/docs/zh-cn/network/private-chain/solo.html

* 在本地主机搭建私有链(https://docs.neo.org/docs/zh-cn/network/private-chain/private-chain2.html

* 用虚拟机搭建私有链  (https://docs.neo.org/docs/zh-cn/network/private-chain/private-chain.html

* 使用 neo-local 快速搭建本地网络(https://docs.neo.org/docs/zh-cn/network/private-chain/neolocal.html

还可以参见 社区文章 ,学习更多私链搭建方法。(https://docs.neo.org/articles/zh-cn/index.html

34. 可以使用哪些语言开发智能合约?

NEO 支持多种主流编程语言,可以使用C#、Python、Go、JS 和 Jave 进行开发。目前在 NEO 生态中,C# 与 Python 具有非常完善的基础设施,提供多种编译器可供开发者选择。

35. 如何获取 NEP-5 资产的 Hash? 

可以使用以下一种方法:

* 使用区块链浏览器 https://scan.nel.group进行查看:

    1. 进入浏览器后,点击页面上方导航栏中的Assets。

    2. 在 Assets 列表中选择 NEP-5。

    3. 在列表中点击要查看的资产,可进入详情页面查看到该资产的 Hash。

* 下载插件 RpcNep5Tracker ,(https://github.com/neo-project/neo-plugins/releases/download/v2.10.2/RpcNep5Tracker.zip)然后调用 API 方法 getnep5balances ,(https://docs.neo.org/docs/zh-cn/reference/rpc/latest-version/api/getmetricblocktimestamp.html)即可在响应正文中查看到 NEP-5 资产的 Hash 。

36. 搭建私链后,从多方签名合约中提取资产, 为什么签名时显示钱包中没有对象的私钥? 

搭建私链后,在 (n/2+1) 个共识节点的钱包中都需要进行相同的操作:添加多方签名地址和重建钱包索引。

37. NEO 提供了哪些 SDK 供开发者使用? 

针对主流高级语言如 C#、JavaScript、Java 等,NEO 开发社区开发并维护了多样的 NEO SDK,如下所示:

* C# SDK: neo  (https://github.com/neo-project/neo

* JavaScript SDK: neon-js (http://cityofzion.io/neon-js/

*Java SDK: neow3j  (https://github.com/neow3j

智能合约

38. 为什么我发布 neon 时提示无法还原 NuGet 包?即使我尝试使用 Visual Studio 2017 进行还原,仍然会出现同样的错误。

可根据以下步骤解决该问题:

1. 在 这里 下载 nuget.exe,然后将其复制到 neo-compiler 项目的根目录。(https://www.nuget.org/downloads

2. 打开 Power Shell 或命令提示符(CMD)。

3. 转到 neo-compiler 根目录,运行 nuget restore 。

39. 为什么我发布 C#智能合约编译器失败?

在发布 C#智能合约编译器之前,请确认你进行了以下操作:

* 已安装最新 .net core 2.1 版本;

* 使用 VS2017 发布时,选择目标为 win10-64; 

* 使用 VS2019 发布时,修改目标为 win10-64,并选择 “独立” 部署模式

40. 为什么我发布 neon 项目出现如下错误提示:无法复制文件”obj\Release\netcoreapp1.0\win10-x64\neon.dll“,原因是找不到该文件?

这可能是 VS 2017 (如 15.4,15.5)的一个 Bug,此时需要手动将 \obj\Release\netcoreapp1.0\neon.dll 文件复制到 \obj\Release\netcoreapp1.0\win10-x64\ 文件夹中,然后重新发布即可。

41. 为什么我创建 NeoContract 项目后 , 代码中有很多画红线的地方,提示找不到 Neo 命名空间,而且在项目的引用中有感叹号?

在 VS 中右击解决方案文件,点击 还原 NuGet 程序包 ,这时在 “输出” 面板会看到 “正在还原 NuGet 程序包 …”。所有程序包已经还原成功后,如果代码仍然报错,并且右侧 “引用” 中仍有个感叹号,可以尝试双击感叹号。如果仍然无法解决问题,可以尝试下面的办法:

1. 在 这里 下载 nuget.exe,然后将其复制到NeoContract 项目的根目录。(https://www.nuget.org/downloads) 

2. 打开 Power Shell 或命令提示符(CMD)。

3. 转到 NeoContract 项目的根目录,运行 nuget restore 即可。

42. 为什么当我在 Windows 7 中发布 neon 设置好环境变量后,运行 neon 时提示缺少 api-ms-win-core-console-l2-1-0.dll 文件?

发布时的平台错了,neon 项目默认的发布平台为win10-x64,所以发布到 Windows7 时才会提示缺少dll 文件。这时,需要用文本编译器打开 neon.csproj文件,将 <RuntimeIdentifiers>win10-x64</RuntimeIdentifiers> 更改为<RuntimeIdentifiers>win7-64</RuntimeIdentifiers> 然后用 VS 重新发布该项目即可。或者可以直接用命令dotnet publish -r win7-x64 -c debug 来发布。

详细 RID 可以参考 .NET Core Runtime IDentifier(RID) catalog 。 (https://docs.microsoft.com/en-us/dotnet/core/rid-catalog

43. 为什么我设置好环境变量后,在 CMD 中输入neon 却提示找不到 neon?

这是因为修改环境变量后没有重新启动 CMD,CMD 读取的环境变量还是之前没有修改过的。解决办法:重启 CMD。

44. 已经发布了 neon 并将 neon.exe 所在目录添加到了path, 为什么编译 NeoContract 时卡在 Start NeoContract converter 这一步?

这是因为修改环境变量后没有重新启动 Visual Studio,Visual Studio 读取的环境变量还是之前没有修改过的,所以找不到 neon。

解决办法:重启 Visual Studio。如果仍未解决就重启系统。

45. 我用旧版本的 neon 编译的智能合约,代码写的没有问题,为什么在测试网或主网上运行失败?

NEO 智能合约需要的 开发框架、编译器、NeoVM版本要求一致。否则用旧版本的开发框架和编译器编译的代码有可能在新版 NeoVM 中运行出错。已发布到区块链上的智能合约不受此影响。

当你准备开始智能合约时,确保你的开发框架(如NeoContractPlugin)和编译器(如 neon)是最新版本。

46. 为什么用 neoj 编译的时候出现错误提示:无法找到 org.neo.smartcontract.framework.jar? 

你需要将 neo-devpack-java-master 打包成 jar 包并放入 neoj 的 \neoj\bin\Release\netcoreapp1.1\win10-x64\publish\ 

 本节部分内容摘自文章: NEO Contract Development – Common Pitfalls using Windows 7  (https://steemit.com/neo/@cybourgeoisie/neo-contract-development-common-pitfalls-using-windows-7) 感谢 cybourgeoisie 的贡献。

47. 我成功部署了合约,为什么调用失败了?

这是因为合约使用新的 NEP-8 opcodes 进行编译,不兼容旧的 NEOVM opcodes。要解决这个问题,需要在兼容模式下编译合约:

1. 发布 C# 编译器 neon.exe 添加其路径到环境变量

2. 通过 Visual Studio 2017 编译并构建合约

3. 在兼容模式下编译合约,使用命令: neon contract.dll —compatible 

4. 编译成功后使用新生成的合约文件部署合约

更多更新请关注NEO文档站FAQ链接:https://docs.neo.org/faq/zh-cn/basic.html。  

发表评论

Top