【发布时间】:2019-01-10 19:48:36
【问题描述】:
我正在制作一个简单的智能合约,它本质上是一个账本,人们可以用一个字符串(即将到来的 UI)签名,然后传递给下一个人(使用他们的以太地址)。我只是想创造一些可以在记录旅程的同时在人与人之间传递的东西。
“转移”签名账本的逻辑都是在智能合约中完成的,它以 映射的形式存在,地址的键值从 0 变为 1 表示所有权(1一次拥有它的人)。因为没有实际的以太币/实际货币价值的转移,实际的以太币交易会在这个合约中发生在哪里?
还要对账本签名,我验证签名它的公钥在映射中的值是 1,但我如何检查该人是否拥有该公钥(使用私钥)?
到目前为止我的可靠代码:
pragma solidity ^0.4.4;
contract Pass{
mapping(address => bool) ownership;
mapping(address => string) notes;
constructor(address genesis) public {
ownership[genesis] = true; //this address starts with it
}
function checkOwnership(address p) public view returns(bool){
if(ownership[p]){
return true;
}
return false;
}
function sign(string signedNote) public returns(uint){ // 1 on success 0 on fail
if(checkOwnership(msg.sender)){ //if msg.sender owns the note
notes[msg.sender] = signedNote;
return 1;
}
return 0;
}
function pass(address recipient) public returns(uint){ // 1 on success 0 on fail
if(checkOwnership(msg.sender)){ //if msg.sender owns the note
ownership[msg.sender] = 0;
ownership[recipient] = 1;
return 1;
}
return 0;
}
function viewNotes(address participant) public returns(string){ // signed note on success nothing on fail
if(notes[participant] !== 0){
return (notes(participant));
}
}
}
【问题讨论】:
标签: blockchain ethereum solidity smartcontracts