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

问题描述 投票:0回答:1

我正在创建一个智能合约,旨在提供一种值得信赖的方式来完成项目,但我遇到了一些问题。

到目前为止,有三个主要功能: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);

}

但是freelanceAddr字段仍然为空。仅当自由职业者加入项目时,才通过以下函数初始化它的值:

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不允许“空”初始化,那么我该怎么做才能解决此错误,或者有什么替代方法可以进行验证?

blockchain ethereum solidity smartcontracts remix
1个回答
0
投票

好像是一个较小的语法错误。

我一直在做:

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还是很陌生,并且已经在其他类似的比较中使用了单个“ =”,所以就一直这样做。

© www.soinside.com 2019 - 2024. All rights reserved.