MyCrypto/common/libs/ens/index.ts
HenryNguyen5 67b2e6491c ENS Resolution for AddressField Component (#807)
* Refactor BaseNode to be an interface INode

* Initial contract commit

* Remove redundant fallback ABI function

* First working iteration of Contract generator to be used in ENS branch

* Hide abi to clean up logging output

* Strip 0x prefix from output decode

* Handle unnamed output params

* Implement ability to supply output mappings to ABI functions

* Fix null case in outputMapping

* Add flow typing

* Add .call method to functions

* Partial commit for type refactor

* Temp contract type fix -- waiting for NPM modularization

* Remove empty files

* Cleanup contract

* Add call request to node interface

* Fix output mapping types

* Revert destructuring overboard

* Add sendCallRequest to rpcNode class and add typing

* Use enum for selecting ABI methods

* Add transaction capability to contracts

* Cleanup privaite/public members

* Remove broadcasting step from a contract transaction

* Cleanup uneeded types

* Refactor ens-base to typescript and add typings for ENS smart contracts

* Migrate ens-name-search to TS

* Add IResolveDomainRequest

* Fix rest of TSC errors

* Add definition file for bn.js

* Remove types-bn

* Fix some typings

* make isBN a static property

* progress commit -- swap out bignumber.js for bn.js

* Swap out bignumber for bn in vendor

* Change modn to number return

* Start to strip out units lib for a string manipulation based lib

* Convert codebase to only base units

* Get rid of useless component

* Handle only wei in values

* Use unit conversion in sidebar

* Automatically strip hex prefix, and  handle decimal edge case

* Handle base 16 wei in transactions

* Make a render callback component for dealing with unit conversion

* Switch contracts to use bn.js, and get transaction values from signedTx instead of state

* Get send transaction  working with bn.js

* Remove redundant hex stripping,  return base value of tokens

* Cleanup unit file

* Re-implement toFixed for strings

* Use formatNumber in codebase

* Cleanup code

* Undo package test changes

* Update snapshot and remove console logs

* Use TokenValue / Wei more consistently where applicable

* Add typing to deterministicWallets, fix confirmation modal, make UnitDisplay more flexible

* Split different ENS modes into their own components

* Fix Abi typedef

* Remove redundant moment type package

* Add Aux helper component

* Split out resolve components

* Make 'to' parameter optional

* Change import type

* Change typing to be base domain request

* Split handling of resolving into object handler

* Fix countdown component

* Adjust element spacing

* Implement reveal search functionality

* Add unit display for highest bidder

* Fill out forbidden/NYA modes

* ENS wallet component skeleton

* Clean up prop handling in UnitDisplay

* Change instanceof to typeof check, change boolean of displayBalance

* Add ENS wallet component

* Cleanup spacing

* Convert ConfModal for bidding in ENS

* Make ui component for placing bids

* Fix destructure in placeBid

* Pass through entire wallet

* Remove text center

* Display inline notification ENS isValid & add some ENS tests

* Add export of Aux

* Reformat with prettier

* progress...

* Add ENSUnlockLayout

* Add RevealBid component

* organize NameResolve components

* Merge ENS with transaction-refactor changes

* Fix address resolution

* Update styles

* convert ens name to lowercase before checking

* Add overflow-y:scroll to table

* update ens snapshots & tests

* cast 'undefined' state argument as any for testing

* clean up components

* Connect unitconverter to redux state

* remove unnecessary type assertion

* fix spinner size

* remove old bidmodal

* validate bidmask before opening modal

* progress...

* Update styles

* Add saga / actions for placing a bid

* Update types & clean up dead code

* Delete old test

* Dispatch PlaceBidRequested acitons

* Progress commit -- get ENS bidding ready for tx generation via sagas

* Seperate ENS action creators and types

* Add reducer & actions for ENS fields

* Add preliminary sagas for bid mask and bid value

* Initial commit

* Add loading indicator

* Remove some bidding components

* Revert bidding files

* Remove more bidding code

* Remove rest of bidding code

* Fix ENS error message

* Revert value saga changes

* Remove error param from setting 'To' field

* Fix existing ENS test

* Cleanup address resolution, remove dead code

* Remove error messages from unimplemented ENS

* Fix last character being not set bug

* Remove error state from Meta

* Rename isGenesisAddress to isCreationAddress
2018-01-15 03:57:09 -06:00

87 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import uts46 from 'idna-uts46';
import ethUtil from 'ethereumjs-util';
export function normalise(name: string) {
try {
return uts46.toUnicode(name, { useStd3ASCII: true, transitional: false });
} catch (e) {
throw e;
}
}
export const getNameHash = (name: string = ''): string => {
if (name === '') {
throw new Error('Empty string provided');
}
const normalizedName = normalise(name);
const sha3 = ethUtil.sha3;
const labels = normalizedName.split('.');
const emptyNode = Buffer.alloc(32);
const rawNode = labels.reduceRight((node, currentLabel) => {
return sha3(Buffer.concat([node, sha3(currentLabel)]));
}, emptyNode);
return `0x${rawNode.toString('hex')}`;
};
export interface IBaseDomainRequest {
name: string;
labelHash: string;
mode: NameState;
highestBid: string;
value: string;
deedAddress: string;
registrationDate: string;
nameHash: string;
mappedMode: string;
}
export interface IOwnedDomainRequest extends IBaseDomainRequest {
ownerAddress: string;
resolvedAddress: string;
}
export interface IRevealDomainRequest extends IBaseDomainRequest {
ownerAddress: string;
}
export type DomainRequest = IOwnedDomainRequest | IRevealDomainRequest | IBaseDomainRequest;
export interface IDomainData<Mode> {
mode: Mode;
deedAddress: string;
registrationDate: string;
value: string;
highestBid: string;
}
export enum NameState {
Open = '0',
Auction = '1',
Owned = '2',
Forbidden = '3',
Reveal = '4',
NotYetAvailable = '5'
}
export const modeStrMap = name => [
`${name} is available and the auction hasnt started`,
`${name} is available and the auction has been started`,
`${name} is taken and currently owned by someone`,
`${name} is forbidden`,
`${name} is currently in the reveal stage of the auction`,
`${name} is not yet available due to the soft launch of names.`
];
export interface IModeMap {
[x: string]: (
domainData: IDomainData<NameState>,
nameHash?: string,
hash?: Buffer
) =>
| {}
| { ownerAddress: string; resolvedAddress: string }
| { auctionCloseTime: string; revealBidTime: string };
}