Try setting
web3.eth.defaultAccount = accounts[0]eth.accounts[0]
It sounds like your transaction doesn't know what account to use to sign the call. Any call that changes the state of the contract (write operation) requires a signed transaction.
An alternative approach would be to pass a 'transaction object' as the last argument to contract method:
storage.set(10,{from: accounts[0]});
Edit 1:
When I chose the 'from' account, I got the following error: 'authentication needed: password or unlock'. So I needed to run personal.unlockAccount(eth.accounts[0],"password",15000). You can read about it at 'authentication needed: password or unlock' Error when trying to call smart contract method via web3 .