¿Cómo se realizan las llamadas y transacciones de funciones de contrato de web3?

Lo siento si esto suena como una pregunta para principiantes, pero después de leer mucho material, tengo algunas preguntas.

En primer lugar, si ya se ha creado un contrato, ¿puedo llamar a sus funciones si conozco su ABI y dirección? Creo contract(ABI).at(contractAddress)que hace esto, pero encontré la descripción bastante ambigua.

En segundo lugar, si estoy ejecutando web3 mediante la importación directa de bibliotecas sin MetaMask o Mist cuando inicio una llamada de función, ¿quién es el msg.sender? Si se están ejecutando MetaMask o Mist, ¿es la msg.senderbilletera actualmente registrada?

Finalmente, si quiero crear un navegador Dapp, ¿cómo me aseguro de que algunas funciones solo puedan ser invocadas por el Dapp y nadie más (ni siquiera el propietario)?

¡Gracias de antemano!

Respuestas (1)

1- si conoce la dirección y el ABI, puede llamar a la función del contrato como se describe en el documento oficial:

// creation of contract object
var MyContract = web3.eth.contract(abi);

// initiate contract for an address
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');

var result = myContractInstance.myConstantMethod('myParam');
console.log(result) // '0x25434534534'

myContractInstance.myStateChangingMethod('someParam1', 23, {value: 200, gas: 2000}, function(err, result){ ... });

El remitente de 2 mensajes es la dirección del mensaje // la dirección del remitente de la llamada, por lo que si usa cualquier billetera de ethereum, la dirección de la cuenta se envía con su mensaje (como una IP).

3-para esto usa un modificador:

modifier isAllowed() {
   if (msg.sender != allowed_address) {
        throw;
    }

    _;
}
Gracias por resolver mis dos dudas iniciales. Con respecto al tercero, eso también significa que yo, como propietario de la dirección, también podría iniciar sesión y usar el método, ¿correcto? ¿Hay alguna manera de garantizar que solo la aplicación pueda invocar las funciones? De lo contrario, ¿los inversores seguirían confiando en la integridad de la aplicación si una dirección que se usaría con Dapps pudiera realizar una llamada de función significativa? (no podrán alterar sus saldos negativamente sino solo positivamente)
debe definir la dirección permitida desde la que puede llamar a las funciones; de lo contrario, la llamada falla. normalmente atribuimos tales habilidades a la persona que implementó el contrato (una especie de administrador) pero solo para realizar algunas acciones básicas como detener el contrato (en caso de fallas de seguridad). Si está hablando de un contrato de tokens, le aconsejo que lea sobre el concepto ERC20.
Mi token ya cumple con ERC 223, el problema es que la cantidad que un usuario específico puede retirar del 'banco' debe ser dictada solo por Dapps. De lo contrario, no hay garantía de que el propietario no pueda usarlo maliciosamente.
lo siento, pero no entendí cuál es su necesidad, ¿podría dar más detalles?
Digamos que tienes un banco. Usted deposita dinero en él. Esto se puede hacer a través del propio contrato. Luego, después de depositar el dinero, utiliza una Dapp que puede modificar la cantidad de dinero que ha "depositado" (el depósito aquí se refiere al monto devuelto por la función de asignación estándar ERC20 (dirección, dirección), donde la primera dirección es la del contrato DIRECCIÓN.). Quiero que solo Dapp pueda modificar la cantidad de dinero que ha depositado (lo que significa que solo Dapp y el contrato pueden llamar a la función de aprobación del contrato).
no se trata de la Dapp sino de la cuenta que la ejecuta. cualquiera puede usar su contrato y llamar a las funciones, pero los modificadores basados ​​en la dirección de la persona que llama podrían ayudarlo a definir la política de control de acceso.