単純にアドレスに保存するだけであれば、mapping(address => Data) accounts;とすれば良さそう。
ただし、この場合は、商品ごとにアドレスを持っていないといけない。
緯度経度やstatusの管理は、フロントエンド側(React)で実装か…
memoryとstorageの仕様詳細が欲しいところ。。。
pragma solidity ^0.8.17;
contract Traceability {
struct Data {
uint256 id;
string name;
string latitude;
string longitude;
string status;
}
address[] public users;
mapping(address => Data) accounts;
function registerAccount(uint256 _id, string memory _name, string memory latitude, string memory longitude, string memory status)
public
returns (bool)
{
accounts[msg.sender].id = _id;
accounts[msg.sender].name = _name;
accounts[msg.sender].latitude = latitude;
accounts[msg.sender].longitude = longitude;
accounts[msg.sender].status = status;
users.push(msg.sender);
return true;
}
function ViewAccount(address user) public view returns (uint256, string memory, string memory, string memory, string memory) {
uint256 _id = accounts[user].id;
string memory _name = accounts[user].name;
string memory _latitude = accounts[user].latitude;
string memory _longitude = accounts[user].longitude;
string memory _status = accounts[user].status;
return (_id, _name, _latitude, _longitude, _status);
}
}
ethの受け取り
pragma solidity ^0.8.17;
contract RecvEther {
address public sender;
uint public recvEther;
function () payable {
sender = msg.sender;
recvEther += msg.value;
}
}