調子に乗るな、みんな頭がいい

ある程度負けることを認めながらつらつらと書いていきます。Twitterで育ちました。

EncryptMessage.js Create EncryptMessage page

import { Account, Deadline, NetworkType, TransferTransaction, TransactionHttp, PublicAccount } from 'nem2-sdk'

import { Box, Button, Container, TextField, Typography } from '@material-ui/core'

import React, { Component } from 'react'

# 親の顔より見たコンポーネント

class EncryptMessage extends Component {

  constructor(props) {

    super(props)

 

    this.state = {

      input: {

        public_key: '',

        message: '',

      },

    }

  }

# input: という書き方

  handleFormInputChanged(event) {

    this.setState({

      input: {

        ...this.state.input,

        [event.target.name]: event.target.value,

      },

    })

  }

# 公開鍵をもらってくる、秘密鍵を作る、公開鍵で暗号化?

  handleSendMessage() {

    if (this.state.input.public_key.length === 64) {

      try {

        const privateKey = process.env.REACT_APP_PRIVATE_KEY

        const account = Account.createFromPrivateKey(privateKey, NetworkType.MIJIN_TEST)

 

        const RecipientAccount = PublicAccount.createFromPublicKey(this.state.input.public_key, NetworkType.MIJIN_TEST)

 

        const encryptedMessage = account.encryptMessage(this.state.input.message, RecipientAccount)

 

        const transferTransaction = TransferTransaction.create(

          Deadline.create(),

          RecipientAccount.address,

          [],

          encryptedMessage,

          NetworkType.MIJIN_TEST

        )

 

        const signedTransaction = account.sign(transferTransaction, process.env.REACT_APP_NETWORK_GENERATION_HASH)

        const transactionHttp = new TransactionHttp('http://localhost:3000')

 

# この書き方は重要かもしれない

        transactionHttp.announce(signedTransaction).subscribe(x => console.log(x), err => console.error(err))

      } catch (e) {

        console.log(e)

      }

    }

  }

 

  render() {

    return (

      <Container maxWidth="md">

        <Box m={2}>

          <Box p={1}>

            <Typography variant="h4" gutterBottom>

              暗号化メッセージを含むトランザクションの作成

            </Typography>

          </Box>

          <Box p={1}>

            <Typography variant="body1" gutterBottom>

              受け手の公開鍵

            </Typography>

            <TextField

              label="Recipient Public Key"

              name="public_key"

              onChange={this.handleFormInputChanged.bind(this)}

              value={this.state.input.public_key}

              margin="normal"

              fullWidth

            />

          </Box>

          <Box p={1}>

            <Typography variant="body1" gutterBottom>

              メッセージ

            </Typography>

            <TextField

              label="メッセージ"

              name="message"

              onChange={this.handleFormInputChanged.bind(this)}

              value={this.state.input.message}

              margin="normal"

              fullWidth

            />

            <Button variant="contained" color="primary" onClick={this.handleSendMessage.bind(this)}>

              送金

            </Button>

          </Box>

        </Box>

      </Container>

    )

  }

}

 

export default EncryptMessage