0

假设我的 DApp 获得了以下(智能)合约:

module.exports = {
  winner: async function(value) {

    if (value===10) {

        } 
  } 
}

现在,Dapp 用户可以做一些调用合约的事情,其中​​一些value可以10或不可以。Dapp 确定是否value相等10。到目前为止,一切都很好。

但现在似乎任何拥有有效秘密(以及一些 XAS 发送到 Dapps 的侧链)的人都可以通过一个简单的PUT请求来调用合约,并将api/<dappId>//transactions/unsignedvalue设置为他们想要的任何内容。

如何保证 的值value是 Dapp 设置的,不能被操纵?

4

1 回答 1

1

据我所知,Asch DApps 在 express 服务器上运行,并启用了 cors 中间件,这意味着任何人都可以从任何地方发出请求(GET、POST、PUT 等)。

因此,您可以使用如下所示的脚本轻松调用您的合约:

const axios = require('axios');
var fee = '10000000'
var data = {
        secret: "<your secret>",
    fee: fee,
         type: 1001, //the number for contractfile.function
         args: 1000 // a very high score
         }
axios.put('http://<domain>:4096/api/dapps/<dappid>/transactions/unsigned',data)
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // always executed
  });

由于上述原因,无法保证输入不会被操纵(从 DApp 外部发送)。另见:https ://github.com/AschPlatform/asch/issues/228

于 2018-07-31T10:47:16.380 回答