簡體   English   中英

我的智能合約將在哪里進行交易

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM