¿La implementación de un contrato significa que se sobrescribirá la última instancia?

Debo haberme perdido algo sobre la implementación de contratos, pero para estar seguro:

Estoy usando Truffle, ¿la implementación de un contrato significa que se sobrescribirá la última instancia? Ya que veo que obtiene una nueva dirección cada vez que lo implemento. Pero al mismo tiempo, llamar al contrato en la interfaz de usuario web siempre irá a un solo contrato específico.

¿Esto depende de qué usuario soy? ¿Tengo que ser yo quien lo implementó, o al menos tener acceso a él? Y si es así, ¿cómo define mejor el acceso a un contrato de soldadura?

Respuestas (3)

No, una vez que se implementa un contrato, no se puede sobrescribir.

Su interfaz de usuario web deberá actualizarse con la dirección de cualquier contrato con el que desee interactuar.

Cualquiera puede invocar un contrato. Una función de contrato puede verificar msg.sendery devolver (o throw) inmediatamente si el remitente no debe tener acceso al contrato. Un modificador puede ayudar a aislar esta lógica:

modifier onlyowner {
    if (isOwner(msg.sender))
        _
}

Entonces una función se puede etiquetar con ese modificador, como:

function foo() onlyowner returns (bytes32 r)

Consulte el contrato de billetera para ver un ejemplo y cómo isOwnerse puede definir.

me puede explicar como Truffleresuelve la llamada a los contratos, es decir. el nombre del metodo? ¿Cómo determina a qué dirección... dirección?
Es posible que necesite otra pregunta si necesita explicar más. Truffle coloca datos sobre contratos compilados e implementados en el environmentdirectorio: dichos datos tienen la dirección del contrato y sus métodos.

Un contrato desplegado tiene una dirección y su contenido no se puede modificar. Si implementa el mismo contrato por segunda vez, tiene otra dirección.

Imagine este caso: su contrato da un token para cada usuario que lo usa. Los usuarios del primer contrato implementado y los usuarios del segundo contrato implementado tendrán tokens diferentes. Estos dos tokens no son compatibles.

Por lo tanto, si implementa un contrato y piensa cambiar en el futuro, debe preparar un proceso de migración. ¡No olvide que el contrato puede usar contratos! Y muchos contratos tienen una función de eliminación para desactivarlos.

Debe buscar patrones de diseño para ethereum/Dapps como DOUG/Name Registry. http://fr.slideshare.net/mids106/dapp-design-patterns .

Volver a ejecutar la migración la volverá a implementar en la cadena de bloques en una nueva dirección. También sobrescribirá las ABI dentro de /build/contracts/. Accidentalmente hice esto mientras probaba mi contrato en otra red de prueba, así que tenga cuidado.

Esta respuesta se marcó como de baja calidad debido a su extensión y contenido. Sugiera mejorarlo para responder claramente a la pregunta.