//关键字 contract 跟java的class一样 智能合约是Inbox
contract Inbox{
//string 是数据类型,message是成员变量,在整个智能合约生命周期都可以访问
//public 是访问修饰符,是storage类型的变量,成员变量和是全局变量
string public message = "zsan ";
//view是修饰符,表示该函数仅读取成员变量,不做修改
function getMessage() public view returns(string) {
return message;
因为我想在运行合约的时候点击函数名称就可以显示结果,所以使用了view关键字来显示,但是每次运行都是出现这个错误,网上看别人都能完美运行但是自己却总是运行不成功。
网上大多数教程是2017/2018的,现在是2020年经过2年的发展Remix-Ethereum IDE 版本更新了很多,所以经过我自己的测试0.4.0到0.4.15的版本不兼容了,所以我们只需要更换下版本号为 0.4.16(>=0.4.16就可以)
browser/payable.sol:14:34: Error: Expected token LBrace got ‘View‘ function getMessage()
在学习solidity过程中碰到一个小细节的问题,这个问题不是很难,但是网上找了许多资料也未能找到相关的解决办法,今天偶然看了一篇文章解决了这个问题。错误如下:编写的代码如下://指定编译器版本,版本标识符pragma solidity ^0.4.0;//关键字 contract 跟java的class一样 智能合约是Inbox contract Inbox{ //string 是数据类型,message是成员变量,在整个智能合约生命周期都可以访问 /
ERC-1363应付代币
ERC-1363允许实现可用于付款的ERC-20令牌。
这是币的实现,它为ERC-20代币定义了代币接口,该接口支持在transfer或transferFrom之后执行接收者代码,或在approve以后执行接收者代码。
在ERC-20转移或批准(即付款)之后,无法执行代码,因此要执行某项操作,需要发送另一笔交易并向GAS支付两次费用。 ERC-1363使令牌支付更容易且更容易进行,而无需使用任何其他侦听器。 它允许在一次交易中进行转移或批准后进行回调。
以太坊智能合约的许多提议用途都可以接受ERC-20付款。
创建代币支付众筹
出售代币服务
由于这些原因,它被命名为“
Payable
Token
” 。
无论如何,您都可以将其用于特定的实用程序,或用于在收到转移或批准后需要执行回调的其他任何目的。
npm insta
最近在修改公司的老项目,项目中对于通讯录的内容进行了查询操作,之前一直都运行的很正常,突然这两天出现了运行crash或者无法查询到正确信息,甚至无法查询到信息的问题,最终通过两个问题的修改,发现了共同点
其问题虽然错误现象不同,但报错信息几乎一致
在crash中报错信息为"invalid
token
LIMIT",而在无法查询到通讯录的信息中报错信息则为"invalid
token
deleted",
经最终确认发现:该类问题的错误信息主要是在代码的调用过程中,查询数据库时,使用了sql语句,且sql
1.大多数教程是前两年的,现在更新的有些快,版本差异很大。
2.编译显示contracts/HelloWorld.
sol
:9:31:
Error
:
Expected
token
LBrace
got
‘
View
’
function
getName() public
view
returns(string)。查找很多资料发现是版本信息的问题,换到0.4.16版本以上就可以编译了
QML 项目打开的时候,问题栏中会出现很多这种错误提示,但是程序编译、运行都没有问题,只要在文件中任何位置按下空格,然后保存一下,这个界面上所有的这种问题就消失了;但是,当再次打开这个工程、或者重启 Qt IDE 之后,这个问题还是会出现,让人很不开心~
在 QTCN 上提问之后,有网友觉得是编码格式问题,之后,我就在 UTF-8 加不加 BOM (Byte Order Mark)的问题上百度了一...
Token
的引入:
在Web领域基于
Token
的身份验证随处可见。在大多数使用Web API的互联网公司中,
token
s 是多用户下处理认证的最佳方式。客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,
Token
便应运而生。
Token
的定义:
Token
是服务端生成的一串字符串,以作客户端进行请求的一个令牌...
文章目录实验目的实验任务实验内容实验步骤分析c-的词法规则算法基本思想Step1 find
token
:Step2:DFA状态图构建Step3:使用while+switch双循环将DFA代码化主程序流程各程序模块之间层次关系主要变量说明实验结果源码
学习和掌握词法分析程序手工构造状态图及其代码实现方法。
(1)阅读已有编译器的经典词法分析源程序;
(2)用C或C++语言编写一门...
//SPDX-License-Identifier: SimPL-2.0 pragma
sol
idity >=0.7.0 <0.8.9; contract zhongchou{ //投资者投资记录:投资目标,投资金额 struct toMoney{ address
payable
addressReceiptor; uint money; } //投资者基本信息:地址,是否被激活,总投资金额,投资次数,映射记录投资记录 struct funder{ address
payable
addressfunder; bool isActive; uint totalMoney; uint numberGive; mapping(uint=>toMoney)expMap; } //众筹合约:合约创建者,是否被激活,金额总需求,已投资金额,投资人数量,映射记录投资人 struct needMoneyContract{ address
payable
addressNeeder; //
payable
address addressContract; bool isActive; uint totalMoney; uint giveMoney; uint amountFunder; mapping (uint=>funder)mapFunder; } //众筹发起者:地址,激活状态,需求总金额,已经被投资的金额,发起的众筹的数量,映射记录投资合约 struct needer{ address addressNeeder; bool isActive; uint amountMoneyNeed; uint amountHasFunded; uint numberContract; mapping(uint=>needMoneyContract)expMap; }
//初始化众筹发起者和投资者
function
initNeeder(address _addressNeeder, uint _amountMoneyNeed) public{
theNeeder = needer(_addressNeeder, true, _amountMoneyNeed, 0, 0);
function
initFunder(address _addressFunder) public{
theFunder = funder(_addressFunder, true, 0, 0);
//创建众筹合约
function
createContract() public{
require(theNeeder.isActive, "The needer is not active");
theContract = needMoneyContract(theNeeder.addressNeeder, true, theNeeder.amountMoneyNeed, 0, 0);
theNeeder.numberContract++;
theNeeder.expMap[theNeeder.numberContract] = theContract;
//投资众筹合约
function
invest(uint _money) public
payable
{
require(msg.value == _money, "Please pay the correct amount");
require(theFunder.isActive, "The funder is not active");
require(theContract.isActive, "The contract is not active");
require(theContract.giveMoney + _money <= theContract.totalMoney, "The total amount of money has been reached");
theFunder.totalMoney += _money;
theFunder.numberGive++;
theFunder.expMap[theFunder.numberGive] = toMoney(msg.sender, _money);
theContract.giveMoney += _money;
theContract.amountFunder++;
theContract.mapFunder[theContract.amountFunder] = theFunder;
theFunder.addressfunder.transfer(msg.value);
//查询众筹合约信息
function
getContract() public
view
returns(address, bool, uint, uint, uint){
return (theContract.addressNeeder, theContract.isActive, theContract.totalMoney, theContract.giveMoney, theContract.amountFunder);
//查询众筹发起者信息
function
getNeeder() public
view
returns(address, bool, uint, uint, uint){
return (theNeeder.addressNeeder, theNeeder.isActive, theNeeder.amountMoneyNeed, theNeeder.amountHasFunded, theNeeder.numberContract);
//查询投资者信息
function
getFunder() public
view
returns(address, bool, uint, uint, uint){
return (theFunder.addressfunder, theFunder.isActive, theFunder.totalMoney, theFunder.numberGive, theFunder.expMap.length);