import web3 from "Embark/web3" import ENSSubdomainRegistry from 'Embark/contracts/ENSSubdomainRegistry'; import TestToken from 'Embark/contracts/TestToken'; import React from 'react'; import { connect } from 'react-redux'; import Hidden from '@material-ui/core/Hidden'; import CircularProgress from '@material-ui/core/CircularProgress'; import { Button, MobileSearch, MobileButton, Field } from '../../ui/components'; import { withFormik } from 'formik'; import { hash } from 'eth-ens-namehash'; import { zeroAddress, zeroBytes32, formatPrice } from './utils'; import { getStatusContactCode, getSNTAllowance, getCurrentAccount } from '../../reducers/accounts'; import FieldGroup from '../standard/FieldGroup'; import LinearProgress from '@material-ui/core/LinearProgress'; import TokenPermissions from '../standard/TokenPermissionConnect'; import { generateXY } from '../../utils/ecdsa'; const { soliditySha3, fromWei } = web3.utils; const InnerForm = ({ values, errors, handleChange, handleBlur, handleSubmit, isSubmitting, setFieldValue, subDomain, domainName, domainPrice, SNTAllowance, SNTBalance, }) => (
{!subDomain && } {!domainName && { ENSSubdomainRegistry.methods.getPrice(hash(values.domainName)) .call() .then((res) => { setFieldValue('price', fromWei(res)); }); }} > Get Price } />} {!domainPrice && } setFieldValue('address', web3.eth.defaultAccount)}>Use My Primary Address} /> {!isSubmitting ? : } setFieldValue('statusAddress', '')} wide /> setFieldValue('address', '')} required wide />
{!Number(SNTAllowance) || (Number(domainPrice) && !Number(SNTBalance)) ? : !isSubmitting ? : }
); const RegisterSubDomain = withFormik({ mapPropsToValues: props => ({ subDomain: '', domainName: '', price: '', statusAddress: props.statusContactCode, address: web3.eth.defaultAccount }), validate(values, props) { const errors = {}; const { address } = values; const { subDomain } = props || values; if (address && !web3.utils.isAddress(address)) errors.address = 'Not a valid address'; if (!subDomain) errors.subDomain = 'Required'; return errors; }, handleSubmit(values, { setSubmitting, props }) { const { address, statusAddress } = values; const { subDomain, domainName, registeredCallbackFn } = props || values; const { methods: { register } } = ENSSubdomainRegistry; const subdomainHash = soliditySha3(subDomain); const domainNameHash = hash(domainName); const resolveToAddr = address || zeroAddress; const points = statusAddress ? generateXY(statusAddress) : null; const toSend = register( subdomainHash, domainNameHash, resolveToAddr, points ? points.x : zeroBytes32, points ? points.y : zeroBytes32, ); toSend.estimateGas().then(gasEstimated => { console.log("Register would work. :D Gas estimated: "+gasEstimated) console.log("Trying: register(\""+subdomainHash+"\",\""+domainNameHash+"\",\""+resolveToAddr+"\",\""+zeroBytes32+"\",\""+zeroBytes32+"\")") toSend.send({gas: gasEstimated+1000}).then(txId => { if(txId.status == "0x1" || txId.status == "0x01"){ console.log("Register send success. :)") } else { console.log("Register send errored. :( Out of gas? ") } console.dir(txId) }).catch(err => { console.log("Register send errored. :( Out of gas?") console.dir(err) }).finally(() => { // REQUIRED UNTIL THIS ISSUES IS RESOLVED: https://github.com/jaredpalmer/formik/issues/597 setTimeout(() => { registeredCallbackFn(resolveToAddr, statusAddress || zeroBytes32); }, 200); setSubmitting(false); }); }).catch(err => { console.log("Register would error. :/ Already Registered? Have Token Balance? Is Allowance set?") console.dir(err) setSubmitting(false); }); } })(InnerForm); const mapStateToProps = state => ({ statusContactCode: getStatusContactCode(state), SNTAllowance: getSNTAllowance(state), SNTBalance: getCurrentAccount(state) && getCurrentAccount(state).SNTBalance, }); export default connect(mapStateToProps)(RegisterSubDomain);