El problema involucra 3 contratos con una interdependencia de la siguiente manera:
biblioteca --> ProductContract --> BillingContract
Los contratos están estructurados de la siguiente manera: (El contrato DataSet.sol a continuación se hace referencia a partir de un ejemplo de solidez de: https://github.com/ chriseth/solidity-examples/blob/master/iterable_mapping.sol
DataSet.sol:
library DataSet {
struct IndexValue { uint keyIndex; uint256 value;}
struct KeyFlag { uint key; bool deleted; }
struct KeyValue { uint key; uint value; }
struct Data {
mapping(uint => IndexValue) data;
KeyFlag[] keys;
//KeyValue[] kvpairs;
uint size;
}
function insert(Data storage self, uint key, uint256 value) returns (bool replaced){
uint keyIndex = self.data[key].keyIndex;
self.data[key].value = value;
if (keyIndex > 0)
return true;
else
{
keyIndex = self.keys.length++;
self.data[key].keyIndex = keyIndex + 1;
self.keys[keyIndex].key = key;
self.size++;
return false;
}
}
function getCurrent(Data storage self) returns(uint index){
return self.size - 1;
}
}
ContratoProducto.sol:
import "DataSet.sol";
contract ProductContract {
using DataSet for *;
DataSet.Data d;
mapping (uint => uint) IDToVal;
function register (uint p_id, uint val) returns (bool registered) {
IDToVal[p_id] = val;
registered = true;
}
function getVal (uint p_id) returns (uint v) {
return IDToVal[p_id];
}
}
ContratoFacturación.sol:
import "ProductContract.sol";
contract BillingContract {
ProductContract pc;
address PC_Address;
function BillingContract (address p) {
PC_Address = pc;
pc = ProductContract(p);
function getVal (uint p_id) returns (uint v) {
return pc.getVal(p_id);
}
}
Esto da como resultado un error al compilar:
Error: Library "DataSet" declared twice (will create ambiguities during linking).
library DataSet {
^
Spanning multiple lines.
The other declaration is here: DataSet.sol:3:1:
library DataSet {
^
Spanning multiple lines.
Compiliation failed. See above.
Existe una forma de dependencia transitiva de los contratos anteriores: cuando trato de usar todos los contratos en un solo archivo '.sol', la compilación se realiza correctamente. ¿Hay alguna forma de separar y compilar correctamente los archivos '.sol'? ¡Por favor avise!
De hecho, tuve un problema similar en mi contrato y se debió al hecho de que no incluí la versión pragma en el encabezado:
pragma solidity ^0.4.4;
resolvió mi problema
Espero eso ayude
o0ragman0o
BillingContract.sol
también y vea si compilaskarred14
skarred14
BillingContract.sol
en el siguiente orden - todavía no hay resolución para el error anterior ``` import "DataSet.sol"; import "ContratoProducto.sol"; ```