为什么需要括号来访问 python 中的 Solidity 合约变量?

2024-01-29

在 Solidity 合约中,有如下声明:

contract Lottery is VRFConsumerBase, Ownable {
address payable[] public players;
...
...

在同一合同的其他地方,有一项转让如下:

....
....
recentWinner = players[someIndex];
....
....

} 

deploy.py Python脚本用于部署合约。部署合约的函数是:

def deploy_lottery():
      Lottery.deploy(....)
....
....

部署并执行其他操作后...合同的最近的获奖者使用括号从 python 脚本访问变量,如下所示:

def end_lottery():
      print(f"{lottery.recentWinner()} is the winner!")
  

我相当基本的问题是,为什么使用括号? centreWinner 不是 Lottery 合约中定义的函数。如果我运行不带括号的脚本,我会得到以下输出。

<ContractCall 'recentWinner()'> is the winner!
Terminating local RPC client...

所以看来括号是必要的。有人可以解释一下发生了什么事吗?为什么我应该像函数一样对待这个变量来检索它的值?如果您还可以向我指出一些相关的帖子/阅读材料,我将不胜感激。谢谢你!


EVM 没有公共变量,只有公共访问器函数。

在幕后,Solidity 编译器生成一个名为recentWinner()为你。这称为访问器或获取函数 https://blog.titanwolf.in/a?ID=00750-8efeff95-ae1c-44ca-85c1-56784b7650e5。与 Java 等语言不同,没有get函数的前缀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么需要括号来访问 python 中的 Solidity 合约变量? 的相关文章

  • web3 websocket连接阻止节点进程退出

    我有一个创建 web3 websocket 连接的 Node js 进程 如下所示 web3 new Web3 ws localhost 7545 当进程完成时 我向它发送一个 SIGTERM 它不会退出 而是永远挂起 没有控制台输出 我在
  • 未找到源“@openzeppelin/contracts/token/ERC721/ERC721.sol”:不支持文件导入回调

    我已使用 Solidity 扩展将 Open Zeppelin ERC721 令牌标准导入到我的 VS Code 中 但在我的所有 OZ 导入语句中看到以下警告 错误截图 https i stack imgur com cfVUH png
  • 开发人员指南从以太坊迁移到 Solana

    这篇文章是关于什么的 以太坊是近期最重要的创新之一 历史上第一次 我们有了一个为社会协调而建立的去中心化全球平台 它有可能彻底改变许多行业 尽管重要 但以太坊的运行环境 以太坊虚拟机 EVM 目前的状态并不是为消费级应用而构建的 它是一个单
  • 如何通过HardHat获取底层合约地址的私钥?

    我有 HardHat 教程中的智能合约https hardhat org tutorial writing and compiling contracts html https hardhat org tutorial writing an
  • 从 Aave 提款会导致“错误交易已恢复”

    我正在运行一个示例 它将 Aave 代币存入 Aave 中 我正在使用提供的代码合同示例Aave v2 github https github com aave code examples protocol tree main V2 Cre
  • Solidity、Solc 错误:无法构造包含(嵌套)映射的结构

    我正在使用由 npm 安装的 Solc 版本 0 7 0 当我尝试创建包含映射的结构时 收到错误 无法构造包含 嵌套 映射的结构 请检查代码 SPDX License Identifier MIT pragma solidity 0 7 0
  • Chainlink节点:交易待处理时该怎么办?

    我有一个 chainlink 节点 并且有些交易似乎被卡住了 如何修复待处理的传出确认 大多数情况下 您没有使用 Gas 为您的 chainlink 节点账户提供资金 转到您的配置并获取ACCOUNT ADDRESS并将 ETH 发送到该地
  • 如何访问具有数组类型值的 Solidity 映射?

    我定义了一个映射类型的状态变量 例如映射 uint256 gt uint256 我想将其公开 以便我可以从合同之外访问它 但是编译器报错TypeError Wrong argument count for function call 1 a
  • Remix 上没有自动完成/代码完成功能?

    我在 Youtube 上观看 Remix 上的教程 他在输入代码时具有自动完成功能 但我没有 有谁知道如何启用它 这将帮助我更轻松地编写代码 但我在任何地方都找不到解决方案 对我来说 只需点击左下角的 设置 按钮并启用 在编辑器中启用代码完
  • Solidity - 输入 JSON 描述的 Solidity 代码

    我想编译我的以太坊 HelloWorld sol 智能合约 在所有教程中 您都是这样做的 var solc require solc var compiledContract solc compile fs readFileSync Hel
  • 恢复发送至自部署合约的BNB

    我正在尝试创建 BOT 因此在 BSC 中从 eatamask 创建并部署了一个合约 我向该合约发送了一些 BNB 来检查 但没有成功 我怎样才能拿回BNB 感谢帮助 因为我对此很陌生 除非您在合约中具有允许您提取资金的自定义功能 否则它们
  • 如何获取交易结果和状态

    我正在尝试使用以太坊区块链和 Solidity 合约 我目前正在部署合约并对其执行一些操作 但我想知道如何获取特定交易的一些 反馈 回调 返回 例如 有没有办法将事务的状态设置为 0 错误 并仍然获取事件 if id length lt 0
  • 私有区块链与 Hashgraph、Ripple、BigChainDb

    我一直在研究不同区块链的一些用例 最后我得出的结论是 建立一个私有区块链相当于拥有一个分布式数据库 在其之上添加了区块链概念 如不可篡改 数字签名等 例如 Bigchaindb 好吧 如果我们确实需要智能合约功能 那么分布式数据库可能无法工
  • 使用 ethers js 运行安全帽测试时,合约事件侦听器不会触发

    这是一个非常小的存储库来显示该问题 https github com adamdry ethers event issue https github com adamdry ethers event issue 但我也会在这里解释一下 这是
  • 如何删除solidity中的数组项

    我正在尝试删除 Solidity 数组中的某个项目 我正在探索一些文章 https ethereum stackexchange com questions 1527 how to delete an element at a certai
  • 如何使用助记词创建Web3py帐户

    我正在使用 web3 制作自己的桌面 BSC 钱包 目前我正在使用 private key private key account w3 eth account privateKeyToAccount private key 但我想使用助记
  • 如何使用 Solidity 和 Web.js 在以太坊区块链上保存和检索数据

    下面的代码仅返回收据 但我希望它返回一个数据元组 如下面的合同所示 我如何让它返回数据 我找不到关于如何保存和检索数据的好教程 我知道这是一个昂贵的用例 我只是想做一个基本的概念证明并同时学习 我在用着 电子邮件受保护 cdn cgi l
  • 在 C# 中解析 Cryptocompare API Json 数据

    我正在加载数据 这是返回 Response Success Type 100 Aggregated false Data time 1504979760 high 14 26 low 14 26 open 14 26 volumefrom
  • 在 Solidity 中初始化一个大的固定长度数组

    我正在以太坊上构建一个游戏作为我的第一个项目 但我面临着存储和天然气限制 我想在区块链上存储一个存储智能合约 以便在部署后查询 我确实需要使用手动插入的常量值来初始化固定长度数组 我的情况如下 contract A some states
  • Solidity 中的地址(0)是什么

    谁能向我解释一下什么address 0 是在 Solidity 中吗 我在文档中找到了以下内容 但对我来说并没有真正意义 如果目标账户是零账户 地址为0的账户 则交易创建一个新合约 如前所述 该合约的地址不是零地址 而是从发送方及其发送的交

随机推荐

  • 将反应本机升级到最新版本

    我有一个在react native 0 49 3 上运行的应用程序 我想升级到最新版本 v0 57 4 我应该逐步更新它吗 例如 0 49 gt 0 50 gt 0 51 等 或者我可以直接更新到最新版本吗 你建议使用react nativ
  • 委托和谓词查询

    我正在学习 lambda 并试图理解为什么 同时拥有 EmployeeFilterAge 类 如下所示 public class EmployeeFilterAge int age public EmployeeFilterAge int
  • iOS 8 Safari 打印重定向不会停止 javascript 执行

    我需要提供在成功保存时以及打印重定向到搜索页面后打印标签的能力 这适用于 chrome firefox ie iOS 6 7 safari 等 但是 当从 javascript 发出 window print 时 iOS 8 似乎不再停止
  • 运行 zipalign 时出错

    尝试在 Eclipse 中导出签名的 apk 时出现此错误 运行 zipalign 时出错 打不开 作为 zip 存档 我已运行 帮助 gt 检查更新 以确保安装了最新更新并且 SDK 工具也是最新的 我收到了同样的错误消息 让我发疯 直到
  • 从类路径中动态删除 jar

    我有一个要求 必须根据从 UI 捕获分布的分布来更改 jar 一组与另一组的分布各不相同 如果选择了某个发行版 则必须以动态 编程方式将与该发行版相关的 jar 添加到类路径中 如果选择另一个发行版 则必须动态地从类路径中删除添加到类路径的
  • 返回只出现一次的数字 (JavaScript)

    假设我有数组 1 2 3 5 2 1 4 如何让 JS 返回 3 4 5 我在这里查看了其他问题 但它们都是关于删除多次出现的数字的副本 而不是原始文件和副本 Thanks Use Array filter https developer
  • 调用 win32 API 并对类函数进行回调

    我试图通过将一些现有的 win32 UI 代码放入一个类中来清理它 以前我有一个像这样的 AppDlgProc 函数 BOOL CALLBACK AppDlgProc HWND hDlg UINT uMsg WPARAM wParam LP
  • 将 JTextField 添加到游戏菜单 (graphics2d)

    我正在开发一款多人游戏 在菜单中 我需要添加一个字段 玩家可以在其中输入主机 IP 我正在使用 Graphics2D 制作菜单 并循环更新它 JFrame screenFrame screen getFullScreenWindow whi
  • 自定义 UITableViewCell prepareForReuse 未按预期工作

    My prepareForReuse无法正常工作 我有一个UITableView那应该有一个login UIButton仅在表的第一部分的第一行中 但当 在prepareForReuse 我删除了login按钮 它会保留并进入下一批行 视频
  • 在 Jekyll 中显示一个文件夹下的页面?

    我认为管理 Jekyll 页面的本机方式 即通过在根文件夹下创建 md 文件 文件夹 有点混乱 因此 我想将我想要显示的每个页面放入名为 pages 的文件夹中 此外 我希望这些页面具有级联结构 假设我的文件夹具有以下结构 pages gt
  • 为什么标签的 href 属性会打印到屏幕上? [复制]

    这个问题在这里已经有答案了 可能的重复 显示带有蓝图的 URL 的超链接 https stackoverflow com questions 4258417 hyperlinks showing url with blueprint DOM
  • 扩展 umbraco 仪表板

    我想将我自己的部分添加到 umbraco 仪表板 以便我可以将我自己的管理部分集成到现有的登录 管理结构中 这是否可以在不编辑和重新编译 umbraco 源代码本身的情况下实现 推荐吗 如果是这样 有人有资源开始这样做吗 是的 这是可能的
  • Ios的Uiwebview可以打开.mht或者.mhtml文件吗

    是否有任何标准将 mht 文件转换为 html 所以我可以在 iosWebview 中打开它 我可以在 ios webview 中打开 mht 文件吗 是否有任何库或第三方工具可以执行相同的操作 None
  • 我无法使用 ChromeDriverManager().install() 安装 ChromeDriverManager

    我已经学习Python 2个月了 这个错误从来没有在我身上发生过一次 但突然我无法下载CHROMEDRIVERMANAGER 每当我进入其网站手动下载它时 它就会说 该 XML 文件似乎没有任何样式信息 文档树如下所示 错误 Access
  • 如何将 PyCharm 连接到位于 Docker 容器内的 python 解释器?

    我从 Docker 开始 但我不知道如何配置 PyCharm 以使用位于容器中的 python 解释器 使用 Vagrant 设置很容易 https www jetbrains com pycharm quickstart configur
  • 为什么Graphics类中的drawPolygon方法是抽象的而我仍然可以使用它

    In 图形类 http download oracle com javase 1 4 2 docs api java awt Graphics html drawPolygon 28int 5B 5D 20int 5B 5D 20int 2
  • 奇怪的 PIL.Image.fromarray 行为,模式为 '1' 时 numpy 零和一

    对我来说应该有一些谜题 根据 PIL 文档 它具有不同的图像模式 如 1 L 8 RGB RGBA 等 但我对模式 1 感兴趣 1 位像素 黑白 每个像素存储一个像素 字节 我创建了 2 个大小为 100 x 100 的矩阵 第一个只有零
  • Golang:json.Unmarshal 未正确返回数据[重复]

    这个问题在这里已经有答案了 我有一个 json 文件 themes snow theme json Name snow Bgimage background jpg Width 600 Height 400 Itemrotation 20
  • PHP/PAM更改用户密码?

    是否有任何使用 PHP 更改 Linux 用户密码的工作包 我尝试过使用 PECL PAM 但在尝试更改密码时出现错误 Edit PHP代码 echo pam chpass username password new pass error
  • 为什么需要括号来访问 python 中的 Solidity 合约变量?

    在 Solidity 合约中 有如下声明 contract Lottery is VRFConsumerBase Ownable address payable public players 在同一合同的其他地方 有一项转让如下 recen