Solidity
web3.py 如何處理常量 getter 函式?
我已經建立了一個智能合約,現在我正在使用
web3.py
. 在我的契約中,我聲明了一些私有變數,並創建了帶有修飾符的 getter 函式來返回這些私有變數。但是,如果我呼叫 getter 函式,則返回私有變數,無論此時哪個帳戶被解鎖。在 中進行測試時Remix
,如果從同一帳戶訪問,則不會返回該值。有人知道這是一個web3.py
錯誤還是與契約邏輯有關?pragma solidity ^0.4.16; contract exampleContract { uint256 private value; address public owner; modifier onlyOwner { require(msg.sender == owner); _; } function exampleContract(uint256 _value) public { owner = msg.sender; value = _value; } function viewValue() onlyOwner public returns(uint256) { return(value); } }
編輯:
我認為這與 .Concise Contract 類有關
web3.py
。使用web3.py
函式call()
,如果沒有通過transact
字典提供,預設發送地址是什麼?from web3 import Web3, IPCProvider from web3.contract import ConciseContract ipc_path = '/path/to/geth.ipc' web3 = Web3(IPCProvider(ipc_path) contract = web3.eth.contract(abi = abi, address = address, ContractFactoryClass = ConciseContract) contract.viewValue() #Who is the sender when unlocking of an account is not required?
在我的契約中,我聲明了一些私有變數,並創建了帶有修飾符的 getter 函式來返回這些私有變數
重要的是要了解這些值並不是真正的“私有”。任何人都可以檢查區塊鏈以發現這些價值。
private
關鍵字只會使其不那麼方便。如果任何人都可以讀取您的私人價值是一件壞事,那麼您將需要找到另一種方法來實現您的目標。
如果沒有通過
transact
字典提供,預設發送地址是什麼?它與事務中的預設發件人相同:它預設為
web3.eth.defaultAccount
或您的客戶端預設發件人是什麼。既然你想打電話,你應該提供一
call
本字典。那看起來像:contract.viewValue(call={'from': SENDING_ACCOUNT})
值得重複一遍:這不是一種有效的機制來隱藏價值。
這很可能與您設置值的邏輯有關。
乙太坊節點將返回舊值,直到您呼叫的交易
exampleContract(uint256 _value)
被探勘。根據您的乙太坊節點設置(未在問題中描述),這可能是瞬間、幾秒鐘或幾分鐘。