![](/img/trans.png)
[英]Where in Ethereum blockchain do transaction details of a smart contract get written?
[英]Where would a transaction take place in my Smart Contract
我正在制作一个简单的智能合约,该合约本质上是一个分类帐,人们可以用字符串签名(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));
}
}
}
“转移”签名分类帐的逻辑全部在智能合约中完成,它以映射的形式存在,并且地址的键值从0变为1表示所有权(一次拥有1个人)
这是一种常见的模式,称为所有者模式。 您只需跟踪单个所有者地址并更新它即可,而不用使用映射,因为您只关心当前所有者,因此可以简化此操作。 像这样简单:
address public owner;
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
constructor() {
owner = msg.sender;
}
function transferOwnership(address _owner) onlyOwner {
owner = _owner;
}
Open Zeppelin 在这里拥有所有权的更完整实施。
因为没有以太币/实际货币价值的实际转移,所以该合约中实际的以太坊交易将发生在哪里?
交易不需要以太币移动。 您可以使用零值交易调用合同上的任何公共/外部函数,并将数据传递给该函数。 交易将像其他任何交易一样在区块链上执行,并运行您在合同内调用的代码。
另外,要对分类帐进行签名,我要验证签名它的公钥在映射中的值为1,但是我将如何检查该人拥有该公钥(使用私钥)呢?
您已经在检查msg.sender
与列入白名单的地址匹配。 对于基本交易,这意味着该交易已通过msg.sender中的地址进行了签名( msg.sender
也可以是一个合同,如果另一个合同与您进行了联系。要检查在所有情况下是谁实际签署了该交易,则必须使用tx.origin
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.