从Solidity中的另一个函数访问一个函数中初始化的变量值



我正在创建一个智能合约,旨在提供一种在项目完成时获得报酬的可靠方式,但我遇到了一些问题。

到目前为止,主要有三个功能:createProject((、joinProject((和submitProject((

我的项目结构如下:

//Project Model
struct project{
uint pid;
address clientAddr;
string name;
uint bidAmount;
string description;
uint deadline; //record unix timestamp
address freelancerAddr;
bool isOpen;
bool isSubmitted;
bool isAccepted;
}

现在我创建了一个客户地址为的项目

function createProject( uint _pid, string memory _name, 
string memory _description, 
uint _deadline)  OnlyClient public  payable{
require(msg.value >= 50,"insufficient funds");
project storage prj = projects[_pid];
prj.pid = _pid;
prj.clientAddr = msg.sender;
prj.name = _name;
prj.bidAmount = msg.value;
prj.description = _description;
prj.deadline = _deadline;
prj.isOpen = true;
prj.isSubmitted = false;
prj.isAccepted = false;
projectIDs.push(_pid) -1;
listProjects.push(_name) -1;
emit LogRegisterProject(_pid, prj.clientAddr, _name, prj.bidAmount, _description, _deadline, prj.isOpen);

}

但自由职业者Addr领域仍然是空的。只有当自由职业者加入项目时,它的值才会由以下函数初始化:

function joinProject (uint _pid, address _freelancerAddr) OnlyFreelancer public {
require(projects[_pid].isOpen=true,"Project is not open yet");
projects[_pid].isOpen = false;
projects[_pid].freelancerAddr = _freelancerAddr;
emit LogJoinProject(msg.sender, _pid);
} 

现在,我想提交这个项目。但在我这么做之前,我想检查调用joinProject的人和试图调用submitProject的人是否是同一个人。所以我试着做以下事情:

function submitProject(uint _pid, address _freelancerAddr) OnlyFreelancer public{
require(projects[_pid].freelancerAddr = msg.sender, "You haven't joined the project");
projects[_pid].isSubmitted = true;
}

但它给了我一个TypeError:在依赖于参数的查找之后没有匹配的声明

然而,当我在加入项目后运行getProjectDetails((函数时,我可以看到更改已经保存,所有状态也都已经保存。但它在将该值转移到submitProject((中的关联调用时遇到了问题。

我已经看到Solidity不允许"null"初始化,那么我能做些什么来解决这个错误,或者有什么替代方法来进行验证吗?

看起来这是一个小语法错误。

我一直在做:

require(projects[_pid].freelancerAddr = msg.sender, "You haven't joined the project");

但是,应该有"=="。:

require(projects[_pid].freelancerAddr = msg.sender, "You haven't joined the project");

我对Solidity很陌生,也看到过单曲"="在其他类似的比较中被使用,所以我也一直在做同样的事情。

最新更新