¿Hay alguna manera de crear dinámicamente un contrato que apunte a un contrato anterior?

Me gustaría implementar un sistema de seguimiento... en el que rastree eventos entre dos partes que entregan un artículo entre ellos... luego el receptor se lo entregaría a otra persona y así sucesivamente...

Me gustaría crear un contrato para cada transacción (entre cada dos) al mismo tiempo, me gustaría poder rastrear toda la cadena... el originador y el contrato anterior...

Hay una manera de hacerlo ?

Respuestas (2)

Prefacio : si desea utilizar web3 para crear esa interacción, lo siguiente debería funcionar:

Si usa el .deploy()método en un contrato construido a través de web3, debe devolver la dirección receipty la instancia en sí confirmation.

myContract.deploy({
  data: '0x12345...',
  arguments: [123, 'My String']
})
.send({
  from: '0x1234567890123456789012345678901234567891', // owner address
  gas: 1500000,
  gasPrice: '30000000000000'
}, function(error, transactionHash){ ... })
.on('error', function(error){ ... })
.on('transactionHash', function(transactionHash){ ... })
.on('receipt', function(receipt){
  console.log(receipt.contractAddress) // contains the new contract address
})
.on('confirmation', function(confirmationNumber, receipt){ ... })
.then(function(newContractInstance){
  console.log(newContractInstance.options.address) // instance with the new contract address
})

Fuente: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#deploy

Aclaremos algunas cosas conceptuales.

Me gustaría crear un contrato para cada transacción.

No muy probable. Las transacciones no son contratos. Algunas transacciones implementan contratos porque ese es su propósito, y otras transacciones interactúan con los contratos. La asociación más cercana que se me ocurre que posiblemente sea sensata es un contrato que registre documentos de transacciones de cierto tipo. Ese podría ser un contrato que maneje todas las instancias de una clase.

rastrear eventos entre dos partes que entregan un artículo entre ellos

Aquí, el lenguaje es un poco difícil de entender porque "eventos" tiene un significado muy específico en Ethereum, al igual que "transacción" y "contrato". Lo interpretaré así para reducir la confusión:

"seguimiento de las interacciones entre dos partes que participan en la entrega de un producto".

Desempaquemos eso.

Producto: Algún tipo de objeto físico con una representación en un contrato. Es probable que esto se mantenga mejor en un solo contrato que almacene información del producto y posiblemente otra información. Esto probablemente se trate mejor como filas en la tabla (lógica), o instancias de una clase, en su preferencia. Comience aquí: https://medium.com/robhitchens/solidity-crud-part-1-824ffa69509a o aquí: ¿Existen patrones de almacenamiento simples y bien resueltos para Solidity?

partes que participan en la entrega: Esto implica que hay un proceso de negocio con pasos que fluyen de cierta manera. En ausencia de una mejor descripción del caso de uso, digamos que las dos partes tienen que firmar y luego se transfiere la propiedad, también conocida como entrega.

Este proceso (sea el que sea) es precisamente para lo que sirve un contrato. Un contrato puede contener la información del producto, incluida la propiedad, y hacer cumplir un proceso que restringe estrictamente cómo se transferirá la propiedad.

Los contratos pueden comunicarse con otros contratos. Por lo tanto, el proceso de transferencia impuesto por el contrato de productos puede verse limitado por una firma, por ejemplo, de un servicio de entrega. Considere dos "aprobadores" que ponen en marcha la pelota, algunos datos de custodia para indicar la empresa de entrega autorizada para el siguiente paso y una confirmación de entrega que concluye la transferencia de propiedad.

En tal escenario, hay un único contrato de productos que uno puede consultar para descubrir el estado/propiedad de cualquier instancia de producto y el historial de cosas que le han sucedido.

Espero eso ayude.