Ist es möglich, einen Smart Contract an eine Adress-Wallet zu senden?

Wie hier erklärt , wird ein Smart Contract auf der Blockchain über eine Transaktion mit dem folgenden Code bereitgestellt:

var primaryAddress = eth.accounts[0]
var abi = [{ constant: false, inputs: { name: 'a', type: 'uint256' } }]
var MyContract = eth.contract(abi)
var contract = MyContract.new(arg1, arg2, ..., {from: primaryAddress, data: evmByteCodeFromPreviousSection})

Aber ist es auch möglich, es jemandem zu schicken, wenn ich seine Adress-Brieftasche kenne? Denn er wird der Hauptnutzer dieses Smart Contracts sein.

Oder soll ihm der Smart Contract nach dem Mining eine Transaktion mit seiner Adresse schicken?

eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether"),data:web3.toHex(smartcontract.address)})

Kann der Benutzer in diesem Fall Zugriff auf den Smart Contract haben, da er nicht der Eigentümer ist?

Vielen Dank

Antworten (2)

Es gibt keinen Vertrag zu senden. Verträge werden erstellt. Die Adresse des neuen Vertrages wird durch die Adresse und Node des Vertragserstellers bestimmt.

Sie können jedoch einige Argumente (z. B. die Adresse des Hauptbenutzers) beim Erstellen eines Vertrags senden. Diese Argumente werden an den Vertragskonstruktor übergeben (siehe solidity docs ):

pragma solidity ^0.4.0;

contract Test {
    address primaryUser;

    function Test(address _primaryUser) {
        primaryUser = _primaryUser;
    }
}

Vertragserstellung:

var testContract = web3.eth.contract(abi);
var test = testContract.new(
   _primaryUser, /* constructor argument here */
   { from: web3.eth.accounts[0], 
     data: bytecode, 
     gas: '4700000'
   });

Jeder, der die Vertragsadresse kennt, kann Transaktionen dorthin senden.

Danke für deine Antwort. Aber ich denke man braucht auch das ABI oder? Soll ich es auch an den Benutzer senden?
Ja, das ist richtig. Der Benutzer benötigt ABI, um die Funktionen des Vertrags aufzurufen. Sie können Quelle und ABI auf Etherscan registrieren: etherscan.io/contractsVerified

Nachdem Sie Ihren Vertrag in der Blockchain bereitgestellt (abgebaut) haben, geben Sie Ihrem Benutzer seine Adresse, nicht den Vertragscode.

Stellen Sie sich vor, Sie haben eine Website eingerichtet und geben dem Benutzer die URL und nicht den Website-Code (das ist Unsinn, es sei denn, Sie arbeiten am Code mit).

In Bezug auf den Zugriff ist Ihr Vertrag während der Bereitstellung für jedermann zugänglich: Er ist öffentlich, alles, was Sie benötigen, ist die Vertragsadresse, um damit zu interagieren.