Digitale Identität mit Signieren

Gibt es eine Möglichkeit, einige Daten direkt aus einem Smart Contract herauszusignieren? Nehmen wir an, ich möchte einen Smart Contract erstellen, der meine digitale Identität darstellt, und ich möchte, dass er die Methode sign() hat. Vielleicht so etwas:

pragma solidity ^0.4.24;

Vertrag DID {

address owner;

modifier onlyOwner {
    require(msg.sender == owner);
    _;
}

constructor() public {
    owner = msg.sender;
}

function sign(string _msgToBeSigned) public onlyOwner returns (bytes32) {
    // here to sign the message
    // and here to return the signed message
}

function verify(bytes32 _signedMessage) public view returns (bool) {
    // here to verify if owner == ecrecover(..., v, r, s)
    // here to return true or false
}

}

Die Frage ist also: Ist es möglich, diese beiden Aktionen innerhalb eines Smart Contracts ohne Verwendung von Client-Code wie web3.eth.sign()?

Danke schön.

Antworten (1)

ecrecoverfunktioniert ungefähr so, wie Sie es erwarten würden , aber signnicht wirklich sinnvoll. Alle Daten auf der Blockchain sind öffentlich, sodass ein Vertrag keine Art von privatem Schlüssel geheim halten kann.

Wenn Sie näher erläutern könnten, was Sie zu tun versuchen (z. B. „Ich möchte X gegen Y beweisen“), könnten die Leute vielleicht andere Ideen vorschlagen.