我正在尝试使用 Solidity 0.4.4 创建智能合约。
我想知道是否有一种方法可以将已经输入的某些值的映射设置为空值?
例如:
这初始化了一个新的映射
mapping (uint => uint) map;
在这里我添加一些值
map[0] = 1;
map[1] = 2;
如何在不遍历所有键的情况下将地图设置回空?
我试过删除,但我的合同没有编译
我刚刚开始学习 Solidity,这是一项个人挑战。我不是开发人员,所以我还有很长的路要走。
我正在关注 Ethereum.org 教程,这是我有疑问的地方:“[msg.sender]”代表什么?我想这是触发合同的钱包地址,但我不确定。
提前,谢谢,祝你有美好的一天,苏马克
我正在为进行投标的以太坊智能合约设计解决方案。用例包括保留一个名称,例如。“myName”并分配给一个地址。然后,人们可以竞标该名称(在本例中为 myName)。对于多个名称,可能会发生多个这样的出价。
struct Bid {
address bidOwner;
uint bidAmount;
bytes32 nameEntity;
}
mapping(bytes32 => Bid[]) highestBidder;
Run Code Online (Sandbox Code Playgroud)
因此,正如您在上面看到的,Bid 结构保存一个投标人的数据,类似地,映射最高投标人中的键(例如 myName)指向一组此类投标人。
现在,当我尝试返回诸如 highBidder[myName] 之类的内容时,我遇到了问题。
显然,solidity 不支持返回结构数组(动态数据)。我要么需要重新构建我的解决方案,要么找到一些解决方法来使其工作。
如果你们对这个问题有任何疑问,请告诉我,我会尽量说清楚。
我被困在这里任何帮助将不胜感激。
我正在尝试使用本地私钥在带有 web3.py 的 python 中发送 ERC20 令牌。
使用此代码,我可以发送以太:
w3 = Web3(HTTPProvider('https://api.myetherapi.com/eth'))
signed_txn = w3.eth.account.signTransaction(dict(
nonce=w3.eth.getTransactionCount(from_address),
gasPrice=w3.eth.gasPrice,
gas=100000,
to=to_address,
value=12345,
data=b'',
),
private_key,
)
w3.eth.sendRawTransaction(signed_txn.rawTransaction)
Run Code Online (Sandbox Code Playgroud)
然后我也发现了这个,但是估计Gas总是出错,在我看来,我无法像这样指定我发送的地址或通过某种签名证明它是我的地址?
contract = w3.eth.contract(address=address, abi=EIP20_ABI, bytecode=bytecode)
contract.functions.transfer(to_address, 121212).transact()
Run Code Online (Sandbox Code Playgroud)
所以我有 JSON abi、字节码、地址和我的私钥,我可以用我找到的代码以某种方式构建一个工作脚本吗?
提前致谢!
我正在学习混音的可靠性。我正在关注 youtube 上的一些教程视频,但在尝试建立 2 个合同时遇到了困难。合约 ERC20Token 具有增加余额的功能。并且 Mycontract 实例化并调用 mint 函数。我和 youtube 上的那个人一样,但我在调用 buyToken 函数时遇到了错误。错误是说
交易到 MyContract.buyToken 出错:VM 错误:恢复。
revert 事务已恢复到初始状态。
注意:如果您发送价值并且您发送的价值应小于您当前的余额,则应支付被调用的函数。调试事务以获取更多信息。
请帮帮我。
这是代码。
pragma solidity 0.5.1;
contract ERC20Token{
string public name;
mapping(address => uint256) public balances;
function mint() public {
balances[tx.origin] ++;
}
}
contract MyContract {
address payable wallet;
address public token;
constructor(address payable _wallet, address _token) public {
wallet = _wallet;
token = _token;
}
function buyToken() public payable {
ERC20Token _token = ERC20Token(address(token));
_token.mint();
wallet.transfer(msg.value);
} …Run Code Online (Sandbox Code Playgroud) 希望你做得很好。我是一名开发人员,对 opensea 测试网上的 3d 模型预览有疑问。
我使用 pinanta 服务器创建了一个元数据文件https://pattirose.growwithsabrina.org/nft/1.json 来托管 glb 文件。Opensea 无法获取模型进行预览。
或者,我尝试在个人托管上托管 glb 文件,并在 json 文件中使用“animation_url”键,但这也不起作用。
所有测试交易均在rinkeby测试网上完成。
请指导如何解决此问题,非常感谢您的支持。谢谢
我正在学习 Solidity,并且知道interface和abstract都是可能包含未使用的函数的类。我的疑问是: Solidity 智能合约interface和Solidity 智能合约有什么区别?abstract contract
blockchain ethereum solidity smartcontracts decentralized-applications
我正在使用 Hardhat 的主网分支编写单元测试,对于测试,我想检查ownerERC20 代币(特别是 DAI)账户的初始余额。这是我到目前为止的测试:
const { ethers } = require("hardhat");
describe("Simple Test", function () {
it("Check balance of DAI", async function () {
const provider = ethers.provider;
const [owner] = await ethers.getSigners();
// Want to get initial DAI balance here so it can be compared later
});
});
Run Code Online (Sandbox Code Playgroud)
有什么简单的方法可以做到这一点?
我有以下代码:
const ethereumProvider = ethers.getDefaultProvider(ETHEREUM_RPC);
const contract = new ethers.Contract(
CONTRACT_ADDRESS,
abi,
ethereumProvider,
);
Run Code Online (Sandbox Code Playgroud)
ethers包给我以下错误:
错误:未为 ENS 名称配置解析器或地址(参数 =“名称”,值 =“734574864865375122901309634679882622222228500042”,代码 = INVALID_ARGUMENT,版本 =contracts/5.5.0)
我不知道这个数字是从哪里来的。我从来没有在任何地方以此作为论据。
此外,仅当部署在 AWS Beanstalk 上时才会出现此错误。
yaml amazon-elastic-beanstalk ethereum smartcontracts ethers.js
如何使用ethers包使用自定义节点 url 创建新的 Provider?
想做这样的事情:
const provider = new ethers.providers.Web3Provider('http://my-node.com')
Run Code Online (Sandbox Code Playgroud)