Алгоритм безопасной передачи данных между пользователями в сети


const path  = require( 'path' );  const



Pdf көрінісі
бет18/22
Дата15.04.2023
өлшемі1,65 Mb.
#82715
түріДипломная работа
1   ...   14   15   16   17   18   19   20   21   22
Байланысты:
Кузьмин А.А. ПМИб-1401

const
path 
=
require(
'path'
); 
const
SolidityCli 
=
require(
'solidity-cli'
); 
const
contractPath 
=
path.join(__dirname, 
'../../contracts/DonationBag.sol'
); 
const
compiled 
=
await SolidityCli.compileFile(contractPath); 
const
compiledDonationBag 
=
compiled[
':DonationBag'
]; 
const
createCode 
=
EthCrypto.txDataByCompiled( 
JSON.parse(compiledDonationBag.
interface
), 
// abi
compiledDonationBag.bytecode, 
// байткод
[creatorIdentity.address] 
// конструктор-аргумент
); 
console.dir(compiledDonationBag); 
Рисунок 4.1 – Компиляция в байткод 
Теперь, когда есть байт-код контракта, мы можем отправить транзакцию 
для создания нового экземпляра в локальной тестовой цепочке. 
// отпрака в локальную цепочку
const
receipt 
=
await web3.eth.sendSignedTransaction (serializedTx); 
const
contractAddress 
=
receipt.contractAddress; 
console.log(contractAddress); 
Рисунок 4.2 – Отправка транзакции 
Теперь контракт находится в блокчейне. Чтобы проверить, правильно ли 
он развернут, можно вызвать функцию. Прежде чем мы сможем подписывать 
пожертвования, нужно отправить какое-то значение в контракт. 
При подписании сообщения, мы не подписываем адрес получателя 
напрямую, а только хэш, который составлял некоторые обобщенные данные: 


39 
Prefix: чтобы гарантировать, что создатель не может быть обманут в 
случайного подписания действительной транзакции Ethereum, мы подставляем 
подписанные данные с чем-то уникальным для нашей системы.
contractAddress: возможно, у создателя имеется более одного 
экземпляра контракта, загруженного в блокчейн. В этом случае подписи могут 
быть воспроизведены в других экземплярах. В качестве предотвращения этой 
атаки мы также добавляем адрес контрактов к подписанному хэшу. 
receiverAddress: подписывая этот адрес, создатель доказывает, что 
данный адрес должен получить пожертвование. 
Теперь у приемника есть подпись от создателя, которую он может 
отправить в контракт, чтобы
потребовать пожертвования[5].
Если все пошло правильно, у получателя должно быть больше эфира.
const
receiverBalance 
=
await web3.eth.getBalance(recieverIdentity.address); 
console.dir(receiverBalance); 
// '1999802840000000000'
Рисунок 4.3 – Проверка баланса 


Достарыңызбен бөлісу:
1   ...   14   15   16   17   18   19   20   21   22




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет