Как гарантировать, что вводом смарт-контракта не манипулируют?

Допустим, мой DApp получил следующий (умный) контракт:

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

    if (value===10) {

        } 
  } 
}

Теперь пользователь Dapp может сделать что-то, что вызывает контракт с некоторыми value который может быть 10 или нет. Dapp определяет, если value равняется 10 или нет. Все идет нормально.

Но теперь кажется, что любой с действительным секретом (и некоторым XAS, отправленным в боковую цепочку Dapps) может ссылаться на контракт с простым PUT запросить api/<dappId>//transactions/unsigned с value установить все, что они хотят.

Как обеспечить, чтобы значение value устанавливается Dapp и не может манипулировать?

1 ответ

Решение

Насколько я понимаю, Asch DApps запускаются на экспресс-сервере с включенным промежуточным программным обеспечением 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

Другие вопросы по тегам