Contracts
Build a contract that can deploy copies of an address book contract on demand, which allows users to add, remove, and view their contacts. You’ll need to develop two contracts for this exercise and import at least one additional contract.Imported Contracts
Review the Ownable contract from OpenZeppelin. You’ll need to use it to solve this exercise. You may wish to use another familiar contract to help with this challenge.AddressBook
Create anOwnable
contract called AddressBook
. It includes:
- A
struct
calledContact
with properties for:id
firstName
lastName
- a
uint
array ofphoneNumbers
- Additional storage for
contacts
- Any other necessary state variables
Add Contact
TheaddContact
function should be usable only by the owner of the contract. It should take in the necessary arguments to add a given contact’s information to contacts
.
Delete Contact
ThedeleteContact
function should be usable only by the owner and should delete the contact under the supplied _id
number.
If the _id
is not found, it should revert with an error called ContactNotFound
with the supplied id number.
Get Contact
ThegetContact
function returns the contact information of the supplied _id
number. It reverts to ContactNotFound
if the contact isn’t present.
QuestionFor bonus points (that only you will know about), explain why we can’t just use the automatically generated getter for
contacts
?Get All Contacts
ThegetAllContacts
function returns an array with all of the user’s current, non-deleted contacts.
You shouldn’t use
onlyOwner
for the two get functions. Doing so won’t prevent a third party from accessing the information, because all information on the blockchain is public. However, it may give the mistaken impression that information is hidden, which could lead to a security incident.AddressBookFactory
TheAddressBookFactory
contains one function, deploy
. It creates an instance of AddressBook
and assigns the caller as the owner of that instance. It then returns the address
of the newly-created contract.