转让所有权web3

时间:2017-12-14 15:17:45

标签: solidity web3

我正在创建一个dapp,使用testrpc将合同的所有权从一个地址转移到另一个地址。但是,我一直遇到这个问题。我已经尝试使用sentransaction方法来执行此所有权更改。也许我以错误的方式调用交换。 Solidity版本0.4.4 web3"版本":" 0.20.2"

web3.js:3127 Uncaught Error: VM Exception while processing transaction: invalid opcode
at Object.InvalidResponse (web3.js:3127)
at RequestManager.send (web3.js:6332)
at Eth.send [as sendTransaction] (web3.js:5066)
at SolidityFunction.sendTransaction (web3.js:4122)
at SolidityFunction.execute (web3.js:4208)
at transferOwnership (luxcure_manu.html:309)
at HTMLButtonElement.onclick (luxcure_manu.html:378

到目前为止完全稳固的合同。

    pragma solidity ^0.4.4;

  // TODO: Hash of the cert through IPFS Hash
  // Transfer ownership of smart contract
contract LuxSecure {
address public contract_owner;           //Manufacturer/owner
//string public current_owner;    //Current Owner of good
bytes32 public model;            //Model
mapping(uint => address) public owners; //list of owners
uint256 public owners_count;
bytes32 public status;           // (Public(Owned by no one), Private(Bought by another entity),stolen(Stolen from public or private))
bytes32 public date_manufactured;   //Time

// Set manufacturer of the Good RUN ONCE ONLY
function manufacturer() public{
  if(owners_count == 0){
  contract_owner = msg.sender;
}
}

//Modifier that only allows owner of the bag to Smart Contract AKA Good to use the function
modifier onlyOwner(){
  require(msg.sender == contract_owner);
  _;
}
 // Add a new product to the blockchain with a new serial
function addNewGoods(bytes32 _model,bytes32 _status, bytes32 _date_manufactured) public returns(bool made) {//Declare Goods struct
setOwner(msg.sender);
model = _model;
status = _status;
date_manufactured =  _date_manufactured;
return true;
}

//This function transfer ownership of contract from one entity to another
function transferOwnership(address _newOwner) public onlyOwner(){
  require(_newOwner != address(0));
  contract_owner = _newOwner;
}

//Set the KEY to uint256 and VALUE owner Ethereum Address
function setOwner(address owner)public{
   owners_count += 1 ;
   owners[owners_count] = owner;
}

//Get the previous owner in the mappings
function previousOwner()constant public returns(address){
  if(owners_count != 0){
  uint256 previous_owner = owners_count - 1;
  return owners[previous_owner];
}
}

// Getter Methods
function getManufacturer() constant public returns(address){
  return contract_owner;
}

function getCurrentOwner() constant public returns(address){
  return owners[owners_count] ;
}

function getOwnerCount() constant public returns(uint256){
  return owners_count;
}

function getModel() constant public returns(bytes32){
  return model;
}

function getStatus() constant public returns(bytes32){
return status;
}

function getDateManufactured() constant public returns(bytes32){
  return date_manufactured;
}

}// end of LuxSecure

Javascript执行所有权转移

function transferOwnership(){
var account_to_transfer = document.getElementById("ethereumaddress").value;
contract.transferOwnership(account_to_transfer,{
    from:web3.eth.accounts[0],
    gas:4000000
});
}

1 个答案:

答案 0 :(得分:0)

我的代码中没有发现任何特定错误。可能在前端格式不好,但无法猜测,因为我们在这里有部分前沿。

我不知道它是否会有所帮助,但有时候,使用松露,我碰巧有一些函数从testrpc / ganache-cli返回了错误的操作码,而代码中没有明显的错误。

删除ABI,重新编译智能合约以获得全新的ABI,然后重新部署合同解决了问题。