Las cadenas de bloques que admiten contratos inteligentes a veces se comparan con los teléfonos inteligentes en el sentido de que es una infraestructura abierta para alojar una cantidad indefinida de aplicaciones, que cualquier participante puede crear e implementar para que esté disponible para toda la red.
En el caso de una cadena de bloques privada, es posible que la parte administradora no desee permitir que los participantes implementen un nuevo contrato, sino solo llamar a los métodos del contrato inteligente que ha implementado.
¿Hay alguna manera de bifurcar el código Etherum para permitir eso? Si es así, ¿las cuentas permitidas para la implementación del contrato pueden estar en el bloque de génesis en lugar de codificadas?
Esto es muy fácil de hacer modificando las fuentes.
En el archivo core/state_transition.go
modifica estas lineas:
if contractCreation {
ret, _, st.gas, vmerr = evm.Create(sender, st.data, st.gas, st.value)
} else {
// Increment the nonce for the next transaction
st.state.SetNonce(sender.Address(), st.state.GetNonce(sender.Address())+1)
ret, st.gas, vmerr = evm.Call(sender, st.to().Address(), st.data, st.gas, st.value)
}
por algo como esto:
if contractCreation {
if sender.Bytes().Cmp(your_allowed_address_here.Bytes())==0 {
ret, _, st.gas, vmerr = evm.Create(sender, st.data, st.gas, st.value)
}
} else {
// Increment the nonce for the next transaction
st.state.SetNonce(sender.Address(), st.state.GetNonce(sender.Address())+1)
ret, st.gas, vmerr = evm.Call(sender, st.to().Address(), st.data, st.gas, st.value)
}
donde sender
está la dirección que ejecuta la transacción, y your_allowed_address_here
es la dirección que es la única que puede crear contratos
No probé el código anterior, pero tienes una idea.
Sí. Si está listo para bifurcarse y cambiar el código, puede hacer lo que quiera. En este caso, "solo" necesitaría limitar las direcciones de remitente permitidas para enviar una transacción a la dirección 0x0 (creación de contrato). Puede hacer que esto sea configurable a través del archivo de génesis, o si está utilizando PoA, puede permitir esta función solo para las autoridades de la red. También es posible implementar una cantidad fija de contratos en el momento de la génesis y deshabilitar la creación de nuevos contratos.