![](/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.